ViewPager в ScrollView нет полосы прокрутки
В моем стиле XML я использую android.support.v4.view.ViewPager в ScrollView. Проблема в том, что я не получаю полосу прокрутки. Сам ViewPager ведет себя также странно, когда я перемещаюсь с одной страницы на другую.
Установка 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>
заранее спасибо
3 ответа
нашел решение -
Причина, по которой вы не получаете полосу прокрутки в том, что ваш 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>
У меня была та же проблема, что ViewPager вел себя странно, и я выяснил причину этого, потому что иногда ScrollView восстанавливает фокус, а ViewPager теряет фокус. Если у вас есть ViewPager в ScrollView, и вы хотите, чтобы он всегда оставался в фокусе, когда вы касаетесь его, а 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;
}
});