ViewPager в ScrollView

Мне нужно иметь ViewPager внутри ScrollView но ViewPager просто не появляется, когда он в ScrollViewвсе нормально когда я не пользуюсь ScrollView,

Я видел пару подобных вопросов, задаваемых здесь на stackru или на других сайтах, и на все они были даны ответы, которые вы должны задать android:fillViewport="true" к вашему обзору прокрутки, чтобы решить проблему, но это решение не работает для меня, ViewPager до сих пор не появляется, даже если у меня есть android:fillViewport="true" в моем ScrollView,

Я думаю, что-то изменилось в Android API, или что-то, и это решение больше не работает, кто-нибудь знает, как я мог бы сделать ViewPager появляются в ScrollView?

ОБНОВЛЕНИЕ: рабочий макет ScrollView 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>

4 ответа

Я сталкивался с подобной проблемой в прошлом. View-Pager должен иметь заданную высоту (он не может переносить содержимое). Поскольку ViewPager загружает отдельные страницы, а не все сразу, он не будет знать, что на самом деле означает "wrap-content". Установка для layout_height значения fill_parent или установленного значения dp позволяет ViewPager статически устанавливать свою высоту и более соответствующим образом реагировать в других макетах.

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);
}}

Я нашел решение для моего использования "HorizontalScrollView" вместо ScrollView,

Сначала создать 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>

Просто добавьте android:fillViewport="true" в ваше представление прокрутки, оно будет работать

Другие вопросы по тегам