2012-01-27 21 views
20

ScrollView içinde bir ViewPager var, ancak ViewPager sadece ScrollView olduğunda görünmüyor, ScrollView kullanmadığımda her şey yolunda.ViewPager ScrollView içinde

Burada, stackoverflow veya diğer sitelerde bu sorgunun sorulması gibi bir kaç soru gördüm ve bunların tümünü, sorunu çözmek için android:fillViewport="true" kaydırma sayfanıza koymanız gerektiği yanıtlandı, ancak bu çözüm benim için çalışmıyor, ScrollView benim android:fillViewport="true" sahip olsa bile hala görünmüyor.

Android apida ya da başka bir şeyde bir şey değişti sanırım ve bu çözüm artık işe yaramıyor,ScrollView içinde nasıl görünebileceğini bilen var mı?

GÜNCELLEME: Bir çalışma scrollview Düzen XML:

<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

sağlamalıdır sizin kaydırma görünümüne fillViewport = "true" işe yarayacak Sorununuz hakkında daha fazla bilgi. Şu anda örneğin bunu çalışmak için çalıştığınız düzen. ViewPager'ın yüksekliği için tam bir piksel değeri tanımlamayı denediniz mi? –

+0

Wow, fikir için teşekkürler, yükseklik ve genişlik özellikleri ile biraz oynadı ve gerçekten çalıştığı scrollview XML düzeni ile oldukça kolay, güncellenmiş orijinal soru çalışmaya yaptı. – boogieman

+0

@boogieman Lütfen cevap olarak belirtiniz ve işaretleyiniz. – Warpzit

cevap

17

Geçmişte benzer bir sorunla karşılaştık. Bir View-Pager, ayarlanmış bir yüksekliğe sahip olmalıdır (sarmalayıcı içerik olamaz). Bir ViewPager ayrı sayfaları yüklediğinden ve bir kerede hepsini yüklemediğinden, "sarma içeriği" nin ne anlama geldiğini bilmeyecektir. Layout_height öğesinin fill_parent veya set dp olarak ayarlanması, ViewPager'ın yüksekliğini statik olarak ayarlamasına ve diğer düzenlerde buna göre daha fazla tepki vermesine olanak tanır.

+4

tek şey Çalışılan, dp'de açıkça bir değer ayarlıyordu. Match_parent bile çalışmadı. –

2

ScrollView yerine "HorizontalScrollView" kullanarak benim için çözüm buldum.

Önce ViewPager'ı tanımladığınız aşağıdaki kodla activity_main.xml'u oluşturun.

 <?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> 

Ve daha sonra tanımlamak için başka left.xml tane oluştur 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

Teşekkürler, benim için çalışıyor. Ama bir sorunla karşılaştım. Görüntüleme cihazında 2 parçam var. Birinde NestedScrollView ve diğeri de RecyclerView var. Yani bu kod kaydırma ile RecyclerView'da kırılır. – Andrew

İlgili konular