【问题标题】:ViewPager in ScrollViewScrollView 中的 ViewPager
【发布时间】:2012-02-20 11:39:21
【问题描述】:

我需要在ScrollView 中添加一个ViewPager,但ViewPagerScrollView 中时不会出现,当我不使用ScrollView 时一切正常。

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

我猜想在 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>

【问题讨论】:

  • 您应该提供有关您的问题的更多信息。例如,您当前尝试使其工作的布局。您是否尝试过为 ViewPager 的高度定义精确的像素值?
  • 哇,谢谢你的想法,我玩了一点高度和宽度属性,实际上让它工作起来很容易,用滚动视图 XML 布局更新了原始问题。
  • @boogieman 请输入答案并标记。
  • 您可以找到解决方案[这里][1] [1]:stackoverflow.com/questions/2646028/…

标签: android android-viewpager scrollview


【解决方案1】:

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

【讨论】:

  • 请在回答前阅读问题。他已经提到这对他不起作用。
【解决方案2】:
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 个片段。一个有 NestedScrollView,另一个有 RecyclerView。因此,在 RecyclerView 中,该代码被破坏了。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    我过去遇到过类似的问题。 View-Pager 必须有一个设定的高度(它不能包装内容)。由于 ViewPager 加载单独的页面,而不是一次加载,它不知道“包装内容”的实际含义。将 layout_height 设置为 fill_parent 或设置 dp 允许 ViewPager 静态设置它的高度,并在其他布局中做出相应的反应。

    【讨论】:

    • 唯一有效的方法是在 dp 中显式设置一个值。甚至 match_parent 也没有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多