2012-08-29 84 views
0

我的xml樣式我在ScrollView中使用了android.support.v4.view.ViewPager。問題是我沒有得到一個滾動條。當我從一個頁面滑動到另一個頁面時,ViewPager本身的行爲也很奇怪。ViewPager in ScrollView no Scrollbar

將ScrollView設置爲固定高度,例如1200dip有助於滾動,但不顯示ViewPager。 這裏是我的xml:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/scrollView" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:fadeScrollbars="true" 
    android:fillViewport="true" 
    android:scrollbars="vertical" > 


    <RelativeLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" > 



     <TextView 
      android:id="@+id/textView1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/menu" 
      /> 

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

</ScrollView> 

在此先感謝

+0

http://stackoverflow.com/questions/2646028/android-horizo​​ntalscrollview-within-scrollview-touch-handling找到了解決辦法 – user1324936

+1

郵報回答你的問題,並驗證自己。我失去了時間到這個頁面,認爲它沒有解決。謝謝。 – shkschneider

回答

1

你沒有得到一個滾動條的原因是因爲你的ViewPager(和RelativeLayout)都有它的高度設置爲match_parent而不是wrap_content。這會導致它與您的ScrollView的尺寸相匹配,這種方式首先會破壞ScrollView的目的。您的ScrollView的內容應該比您的ScrollView本身更高/更高。

總之,您應該將RelativeLayout的高度和ViewPager的高度設置爲wrap_content。此外,您沒有設置要讓RelativeLayout的孩子出現的順序/位置;你可能想改變它(或者改用LinearLayout)。例如:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/scrollView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fadeScrollbars="true" 
    android:fillViewport="true" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

     <TextView 
      android:id="@+id/textView1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/menu" /> 

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

    </LinearLayout> 

</ScrollView> 
+0

我複製了你的xml,但它也沒有滾動。我認爲這是ViewView在scrollView中的根本問題? – user1324936

+0

是的,就像你在上面提供的鏈接中的回答說的那樣,你可以通過擴展ScrollView來覆蓋它的onInterceptTouchEvent(...)方法來解決這個問題。您應該爲自己的帖子提供答案並接受它。 – Reinier

0

我有同樣的問題,即ViewPager行爲怪異,我發現了,這是因爲somethimes的原因了滾動恢復焦點然後ViewPager失去了重點。如果你在ScrollView中有一個ViewPager,並且你希望它始終保持焦點,那麼當你觸摸它並且ScrollView永遠不會獲得焦點時,就是這樣做的。

mViewPager= (ViewPager) findViewById(R.id.pager); 
    mViewPager.setAdapter(adapter); 
    mViewPager.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      mViewPager.getParent().requestDisallowInterceptTouchEvent(true); 
      return false; 
     } 
    });