为什么单个 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_horizontallayout_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。