为什么单个 child 的水平线性布局需要一个 weight 水平居中?
Why does a single child of a horizontal linear layout need a weight to be centered horizontally?
下面的黄色和陶土色条都是水平线性布局,每个布局都包含带有 layout_gravity="center_horizontal"
的图像视图。
尽管 layout_gravity 设置为水平,但为何顶部图像视图未水平居中?
为了使图像视图水平居中,我必须添加 layout_weight
1(陶土条)。但我不明白为什么会这样,为什么指定 center_horizontal
的 layout_gravity
不足以使图像居中?
此外,为什么这只是水平线性布局的问题,对于垂直线性布局,不需要添加 layout_weight 以使图像居中,就像在绿色条中所做的那样。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:orientation="vertical"
tools:context=".MainActivity" tools:deviceIds="wear_square"
android:weightSum="1">
<LinearLayout
android:id="@+id/Horizontal_LL_1"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#f3ff36">
<ImageView
android:layout_width="wrap_content"
android:layout_height="40dp"
android:id="@+id/imageViewHLL1"
android:layout_gravity="center_horizontal"
android:src="@drawable/pizzahut" />
</LinearLayout>
<LinearLayout
android:id="@+id/Horizontal_LL_2"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ff4c44">
<ImageView
android:layout_width="wrap_content"
android:layout_height="40dp"
android:id="@+id/imageViewHLL2"
android:layout_weight="1"
android:layout_gravity="center_horizontal"
android:src="@drawable/pizzahut" />
</LinearLayout>
<LinearLayout
android:id="@+id/Horizontal_LL_3"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ff39e3">
<ImageView
android:layout_width="wrap_content"
android:layout_height="40dp"
android:id="@+id/imageViewHLL3a"
android:layout_weight="1"
android:src="@drawable/pizzahut" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="40dp"
android:id="@+id/imageViewHLL3b"
android:layout_weight="1"
android:src="@drawable/pizzahut" />
</LinearLayout>
<LinearLayout
android:id="@+id/Vertical_LL_1"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="#9eff9a">
<ImageView
android:layout_width="wrap_content"
android:layout_height="40dp"
android:id="@+id/imageViewVLL1"
android:layout_gravity="center_horizontal"
android:src="@drawable/pizzahut" />
</LinearLayout>
</LinearLayout>
不需要。您可以简单地在 LinearLayout
.
上设置 android:gravity="center_horizontal"
如果不这样做,视图默认堆叠在左侧。如果指定权重为 1,则分配给 View 的 space 将改为 LinearLayout 的整个宽度,然后 layout_gravity 允许您在分配的 space 内对齐 View。
下面的黄色和陶土色条都是水平线性布局,每个布局都包含带有 layout_gravity="center_horizontal"
的图像视图。
尽管 layout_gravity 设置为水平,但为何顶部图像视图未水平居中?
为了使图像视图水平居中,我必须添加 layout_weight
1(陶土条)。但我不明白为什么会这样,为什么指定 center_horizontal
的 layout_gravity
不足以使图像居中?
此外,为什么这只是水平线性布局的问题,对于垂直线性布局,不需要添加 layout_weight 以使图像居中,就像在绿色条中所做的那样。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:orientation="vertical"
tools:context=".MainActivity" tools:deviceIds="wear_square"
android:weightSum="1">
<LinearLayout
android:id="@+id/Horizontal_LL_1"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#f3ff36">
<ImageView
android:layout_width="wrap_content"
android:layout_height="40dp"
android:id="@+id/imageViewHLL1"
android:layout_gravity="center_horizontal"
android:src="@drawable/pizzahut" />
</LinearLayout>
<LinearLayout
android:id="@+id/Horizontal_LL_2"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ff4c44">
<ImageView
android:layout_width="wrap_content"
android:layout_height="40dp"
android:id="@+id/imageViewHLL2"
android:layout_weight="1"
android:layout_gravity="center_horizontal"
android:src="@drawable/pizzahut" />
</LinearLayout>
<LinearLayout
android:id="@+id/Horizontal_LL_3"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ff39e3">
<ImageView
android:layout_width="wrap_content"
android:layout_height="40dp"
android:id="@+id/imageViewHLL3a"
android:layout_weight="1"
android:src="@drawable/pizzahut" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="40dp"
android:id="@+id/imageViewHLL3b"
android:layout_weight="1"
android:src="@drawable/pizzahut" />
</LinearLayout>
<LinearLayout
android:id="@+id/Vertical_LL_1"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="#9eff9a">
<ImageView
android:layout_width="wrap_content"
android:layout_height="40dp"
android:id="@+id/imageViewVLL1"
android:layout_gravity="center_horizontal"
android:src="@drawable/pizzahut" />
</LinearLayout>
</LinearLayout>
不需要。您可以简单地在 LinearLayout
.
android:gravity="center_horizontal"
如果不这样做,视图默认堆叠在左侧。如果指定权重为 1,则分配给 View 的 space 将改为 LinearLayout 的整个宽度,然后 layout_gravity 允许您在分配的 space 内对齐 View。