ScrollView中的ViewPager

时间:2012-01-27 13:36:26

标签: android android-viewpager scrollview

我需要在ViewPager内置ScrollViewViewPager只是在ScrollView内没有显示,当我不使用{{}时一切正常1}}。

我已经在stackoverflow或其他网站上看到过这样的问题,所有这些问题都得到回答,您必须将ScrollView放到滚动视图中以解决问题,但此解决方案不会即使我的android:fillViewport="true"中有ViewPagerandroid:fillViewport="true"仍然无效。

我想在android api中有些东西发生了变化,这个解决方案不再适用了,有没有人知道我怎么可能在ScrollView中出现ViewPager

更新:工作的ScrollView布局XML:

ScrollView

4 个答案:

答案 0 :(得分:17)

我过去遇到过类似的问题。 View-Pager必须具有设定的高度(它不能包装内容)。由于ViewPager加载了单独的页面,而不是一次加载,因此它不会知道'wrap-content'实际意味着什么。将layout_height设置为fill_parent或设置dp允许ViewPager静态设置其高度,并在其他布局中做出相应的反应。

答案 1 :(得分:7)

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

答案 2 :(得分:2)

我使用"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>

答案 3 :(得分:-1)

只需将android:fillViewport =“true”添加到滚动视图中即可使用