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;
        }
    });
Другие вопросы по тегам