设置为包装内容的viewpager内部布局的高度

时间:2018-08-08 21:37:35

标签: android android-layout android-viewpager android-linearlayout

在设置android:height="wrap_content"时,我遇到了有关ViewPager的高度设置不正确的问题

现在,我已经成功应用了here中提到的修复程序,它已按预期工作。我的ViewPager正确假定其最高元素的高度。

但是!我的viewpager内部的每个项目都包含一个线性布局,其中包含2个元素,如下所示:(这是我的容器)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
    <ImageView
        android:layout_margin="@dimen/gutterSpaceHalf"
        android:id="@+id/icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <LinearLayout
        android:id="@+id/foo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
        <Button
            android:layout_gravity="bottom"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>
</LinearLayout>

这实际上使我的布局看起来像这样:

bad UI mockup done in paint

在这里我要说明的是,在第二页上,LinearLayout foo的高度将与第一页不同。这是预期的。

但是当我想将每页上的按钮对齐到底部时,问题就来了!这当然是一个问题,因为第一页foo的底部与第二页foo的底部不同。

在我看来,标准解决方案是将foo的高度设置为match_parent。但是,如果执行此操作,整个页面将成为我的imageview的高度,因为上述应用的修复程序无法再正确计算每个孩子的身高。

因此,请记住我的整个目标是拥有等高的页面,并带有动态内容(文本),同时使按钮与页面底部对齐,您在这里提出什么解决方案?

我尝试过的事情包括在树的布局上晃动高度设置,以及在将每个视图的高度添加到ViewPagerAdapter中后将其设置为其容器的测量高度,但是我似乎并没有用

任何建议将不胜感激。如果我错过了什么,或者您想了解更多信息,请发表评论。

1 个答案:

答案 0 :(得分:1)

有五个是

我要做的就是在按钮上方添加weight=1的视图,并为按钮设置一个静态高度。现在,由于添加的视图扩展为填充剩余的大小,因此按钮在每个页面上正确地排列在底部。

我还必须在上面提到的“ hacky”解决方案中定义的高度上加上+1,否则我添加的视图会将项目推出最大页面的布局,例如:

    if (height != 0) {
        heightMeasureSpec = MeasureSpec.makeMeasureSpec(height + 1 /* This is a heuristic solution */, MeasureSpec.EXACTLY);
    }

YESSSSSS

(布局更改):

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <View  <!-- ADDED -->
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="@dimen/buttonHeight"/>