2012-01-27 14 views
20

में मैं एक ViewPager एक ScrollViewViewPager अंदर लेकिन करने के लिए बस जब यह ScrollView में है प्रकट नहीं होता है की जरूरत है, सब कुछ जब मैं ScrollView का उपयोग नहीं करते ठीक है।ViewPager scrollview

मैंने कुछ प्रश्नों को देखा है जैसे कि यहां स्टैक ओवरफ्लो या अन्य साइटों पर पूछा जा रहा है और उन सभी को उत्तर दिया गया है कि आपको समस्या को ठीक करने के लिए android:fillViewport="true" को अपने स्क्रॉलव्यू में रखना होगा, लेकिन यह समाधान मेरे लिए काम नहीं करता है , ViewPager अभी भी दिखाई नहीं दे रहा है भले ही मेरे में android:fillViewport="true" है।

मुझे लगता है कि एंड्रॉइड एपीआई या कुछ में कुछ बदल गया है और यह समाधान अब और काम नहीं करता है, क्या कोई जानता है कि मैं ViewPagerScrollView में कैसे दिख सकता हूं?

अद्यतन: एक काम कर scrollview लेआउट एक्सएमएल:

<ScrollView 
    android:id="@+id/scrollView1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:fillViewport="true"> 


    <LinearLayout 
     android:id="@+id/linearLayout1" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical"> 

      <android.support.v4.view.ViewPager 
       android:id="@+id/itemsViewPager2" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" > 
      </android.support.v4.view.ViewPager> 
    </LinearLayout> 
</ScrollView> 
+1

आप प्रदान करना चाहिए आपकी समस्या के बारे में अधिक जानकारी। वह लेआउट जिसे आप वर्तमान में उदाहरण के लिए काम करने के लिए प्राप्त कर रहे हैं। क्या आपने ViewPager की ऊंचाई के लिए सटीक पिक्सेल मान परिभाषित करने का प्रयास किया है? –

+0

वाह, विचार के लिए धन्यवाद, मैंने ऊंचाई और चौड़ाई विशेषताओं के साथ थोड़ा सा खेला और वास्तव में इसे आसानी से काम करने के लिए बनाया, स्क्रॉलव्यू एक्सएमएल लेआउट के साथ अद्यतन मूल प्रश्न। – boogieman

+0

@boogieman कृपया उत्तर के रूप में डालें और इसे चिह्नित करें। – Warpzit

उत्तर

17

मैंने पहले भी एक ऐसी ही समस्या हुई थी। एक व्यू-पेजर की एक सेट ऊंचाई होनी चाहिए (यह लपेट-सामग्री नहीं हो सकती है)। चूंकि व्यूपेजर अलग-अलग पृष्ठों को लोड करता है, और सभी एक साथ नहीं, यह नहीं जान पाएगा कि 'रैप-कंटेंट' वास्तव में क्या मतलब है। Layout_height को fill_parent या set dp पर सेट करने से ViewPager को स्थिर रूप से इसकी ऊंचाई निर्धारित करने की अनुमति मिलती है और अन्य लेआउट के अनुसार तदनुसार प्रतिक्रिया होती है।

+4

केवल बात यह है कि काम स्पष्ट रूप से डीपी में एक मूल्य निर्धारित किया गया था। यहां तक ​​कि match_parent भी काम नहीं किया। –

2

मुझे ScrollView के बजाय "HorizontalScrollView" का उपयोग करके मेरा समाधान मिला।

पहले कोड के साथ activity_main.xml बनाएं, जहां आप ViewPager को परिभाषित करते हैं।

 <?xml version="1.0" encoding="utf-8"?> 
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:orientation="vertical" > 

      <android.support.v4.view.ViewPager 
       android:id="@+id/pager" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" /> 
      </LinearLayout> 

और बाद में परिभाषित करने के लिए एक और left.xml बनाने अपने HorizontalScrollView:

 <?xml version="1.0" encoding="utf-8"?> 
     <HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res 
       /android" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:orientation="vertical" > 

      <ImageView 
       android:id="@+id/imageView1" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:src="@drawable/ic_launcher" /> 
     </HorizontalScrollView> 
6
public class YourScrollableViewPager extends ViewPager { 

private static final int MATCH_PARENT = 1073742592; 

private int currentPageNumber; 
private int pageCount; 

public YourScrollableViewPager(Context context) { 
    super(context); 
    prepareUI(); 
} 

public YourScrollableViewPager(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    prepareUI(); 
} 

private void prepareUI() { 
    setOffscreenPageLimit(pageCount); 
} 

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    int height = 0; 
    if (getChildCount() != 0) { 
     View child = getChildAt(currentPageNumber); 
     child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
     int h = child.getMeasuredHeight(); 
     if (h > height) height = h; 
    } 
    heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
} 

public void onPrevPage() { 
    onMeasure(MATCH_PARENT, 0); 
} 

public void onNextPage() { 
    onMeasure(MATCH_PARENT, 0); 
}} 
+0

धन्यवाद, यह मेरे लिए काम करता है। लेकिन मुझे कुछ मुद्दे का सामना करना पड़ा। मेरे पास पेजर पर 2 टुकड़े हैं। एक ने NestedScrollView है और दूसरे के पास RecyclerView है। तो RecyclerView पर उस कोड फ़्लिंग को तोड़ दिया गया है। – Andrew

-1

बस एंड्रॉयड जोड़ें: fillViewport = अपने पुस्तक को देखने के लिए "सही" यह काम करेंगे