在创建一个LinearLayout
作为其子项的ImageView
之后,我注意到只显示了第一行。我认为LinearLayout
会在必要时自动将其子级换行到新行吗?宽度似乎不错,但高度却不够。
预期结果
预期的蓝图(ImageView
个计数未按比例缩放)
出于某种原因,当我在另一个视图中创建LinearLayout时,可以正确显示宽度,但是似乎从未调整其高度以适合并显示其中的所有子项。
当前结果
<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>
答案 0 :(得分:0)
水平LinearLayout不会自动换行到第二行以适合其子级。根据Android文档,它仅支持一个方向:
LinearLayout是一个视图组,可将所有子项对齐在一个视图中 方向,垂直或水平
您可以使用flexbox-layout来实现环绕行为。
答案 1 :(得分:0)
LinearLayout
的这种行为是“按预期的”:它将以水平或垂直线显示其子级。
由于您蓝图中的所有子View
看起来都差不多,请考虑切换到GridLayout
,它可以作为androidx库使用(例如 androidx.gridlayout: gridlayout:1.0.0 )。
对于尺寸各异的子View
,FlexboxLayout
是一个不错的选择。它于2017年2月在blog post中引入。有适用于androidx的版本:'com.google.android:flexbox:1.1.0'
答案 2 :(得分:-2)
不要使用6个imageView制作水平linearLayout
制作新的垂直linearlayout,并为每个3 imageView放置两个水平线性布局。