ScrollView中的ViewPager

boo*_*man 21 android scrollview android-viewpager

我需要有一个ViewPager内部a ScrollView但是ViewPager当它进入时不会出现ScrollView,当我不使用时一切都好ScrollView.

我已经在stackoverflow或其他网站上看到过这样的问题,所有这些问题都得到了解答,你必须把它们放到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>
Run Code Online (Sandbox Code Playgroud)

jbe*_*itz 17

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

  • 唯一有效的方法是在dp中明确设置一个值.甚至match_parent也行不通. (4认同)

小智 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);
}}
Run Code Online (Sandbox Code Playgroud)