LinearLayout 未显示其所有子项
LinearLayout not showing all its children
在创建一个以 ImageView
为子项的 LinearLayout
之后,我注意到只显示了第一行项目。我认为 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>
水平 LinearLayout 不会自动换行以适合其子项。根据 Android 文档,它只支持一个方向:
LinearLayout is a view group that aligns all children in a single
direction, vertically or horizontally
您可以使用 flexbox-layout 实现环绕行为。
不要使用 6 个 imageView 制作水平 linearLayout
制作新的垂直线性布局,并为每个 3 个 imageView 放置两个水平线性布局。
LinearLayout
的这种行为是 "as intended":它将以水平或垂直线显示其子项。
由于您的蓝图中所有子 View
的大小似乎都相似,请考虑切换到 GridLayout
,它可以作为 androidx-library(例如 androidx.gridlayout:gridlayout:1.0.0).
对于尺寸不同的 View
儿童,FlexboxLayout
是一个不错的选择。它于 2017 年 2 月在 blog post 中引入。有一个适用于 androidx 的版本:'com.google.android:flexbox:1.1.0'
在创建一个以 ImageView
为子项的 LinearLayout
之后,我注意到只显示了第一行项目。我认为 LinearLayout
会根据需要自动将其子项换行?宽度看起来不错,但高度不行。
预期结果
预期蓝图(ImageView
计数未按比例计算)
当前结果
<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>
水平 LinearLayout 不会自动换行以适合其子项。根据 Android 文档,它只支持一个方向:
LinearLayout is a view group that aligns all children in a single direction, vertically or horizontally
您可以使用 flexbox-layout 实现环绕行为。
不要使用 6 个 imageView 制作水平 linearLayout
制作新的垂直线性布局,并为每个 3 个 imageView 放置两个水平线性布局。
LinearLayout
的这种行为是 "as intended":它将以水平或垂直线显示其子项。
由于您的蓝图中所有子 View
的大小似乎都相似,请考虑切换到 GridLayout
,它可以作为 androidx-library(例如 androidx.gridlayout:gridlayout:1.0.0).
对于尺寸不同的 View
儿童,FlexboxLayout
是一个不错的选择。它于 2017 年 2 月在 blog post 中引入。有一个适用于 androidx 的版本:'com.google.android:flexbox:1.1.0'