LinearLayout不显示其所有子级

时间:2019-01-11 19:20:08

标签: android xml android-linearlayout android-imageview android-cardview

在创建一个LinearLayout作为其子项的ImageView之后,我注意到只显示了第一行。我认为LinearLayout会在必要时自动将其子级换行到新行吗?宽度似乎不错,但高度却不够。

预期结果

enter image description here

预期的蓝图(ImageView个计数未按比例缩放)

enter image description here 出于某种原因,当我在另一个视图中创建LinearLayout时,可以正确显示宽度,但是似乎从未调整其高度以适合并显示其中的所有子项。

当前结果

enter image description here

<androidx.cardview.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/cv_facilities">

    <LinearLayout
        android:id="@+id/ll_facilities"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="10dp">

        <LinearLayout
            android:id="@+id/ll_titlerow"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <ImageView
                android:id="@+id/iv_expandcollapsearrow"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginEnd="10dp" />

            <ImageView
                android:id="@+id/iv_topicsymbol"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginEnd="10dp" />

            <LinearLayout
                android:id="@+id/ll_symbols"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
                <ImageView
                    android:id="@+id/iv_symbol_a"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/ic_language" />

                <ImageView
                    android:id="@+id/iv_symbol_b"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/ic_pets" />

                <ImageView
                    android:id="@+id/iv_symbol_c"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/ic_verified_user" />

                <ImageView
                    android:id="@+id/iv_symbol_d"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/ic_transport" />

                <ImageView
                    android:id="@+id/iv_symbol_e"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/ic_seat" />

                <ImageView
                    android:id="@+id/iv_symbol_f"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/ic_fingerprint" />

                <ImageView
                    android:id="@+id/iv_symbol_g"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/ic_areoplane_depart" />

                <ImageView
                    android:id="@+id/iv_symbol_h"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/ic_areoplane_arrive" />
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>
</androidx.cardview.widget.CardView>

3 个答案:

答案 0 :(得分:0)

水平LinearLayout不会自动换行到第二行以适合其子级。根据Android文档,它仅支持一个方向:

  

LinearLayout是一个视图组,可将所有子项对齐在一个视图中   方向,垂直或水平

您可以使用flexbox-layout来实现环绕行为。

答案 1 :(得分:0)

LinearLayout的这种行为是“按预期的”:它将以水平或垂直线显示其子级。

由于您蓝图中的所有子View看起来都差不多,请考虑切换到GridLayout,它可以作为androidx库使用(例如 androidx.gridlayout: gridlayout:1.0.0 )。

对于尺寸各异的子ViewFlexboxLayout是一个不错的选择。它于2017年2月在blog post中引入。有适用于androidx的版本:'com.google.android:flexbox:1.1.0'

答案 2 :(得分:-2)

不要使用6个imageView制作水平linearLayout

制作新的垂直linearlayout,并为每个3 imageView放置两个水平线性布局。