在ScrollView中的ViewPager

我需要在ScrollView有一个ViewPagerViewPagerScrollView中不会出现,当我不使用ScrollView时候一切正常。

我见过这样的问题在这里被问到在这里stackoverflow或在其他网站上,他们都已经被回答说,你必须把android:fillViewport="true"到你的滚动视图来解决这个问题,但这个解决scheme不工作对我来说,即使我在我的ScrollViewandroid:fillViewport="true"ViewPager仍然不会出现。

我想在android api的东西有所改变,这个解决scheme不工作了,有没有人知道我怎么可能使一个ViewPager出现在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> 

Solutions Collecting From Web of "在ScrollView中的ViewPager"

我过去碰到类似的问题 View-Pager必须有一个设定高度(它不能包装内容)。 由于ViewPager加载单独的页面,而不是一次,它不会知道“包装内容”实际上是什么意思。 将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); }} 

我发现我的解决scheme使用"HorizontalScrollView"而不是ScrollView

首先使用下面的代码创buildactivity_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> 

稍后再创build另一个用于定义HorizontalScrollView left.xml

  <?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”添加到滚动视图中即可