LinearLayout 2 个视图,如果一个视图消失了,它不会使另一个视图居中,尽管我更新了 weightSum

LinearLayout 2 views, if one is gone, it doesn't center the other, although I update the weightSum

这是我的布局:

 <LinearLayout
        android:id="@+id/car_linear_layout"
        android:layout_toRightOf="@id/car_image"
        android:layout_width="wrap_content"
        android:orientation="vertical"
        android:layout_centerVertical="true"
        android:gravity="center_vertical"
        android:layout_height="50sp"
        android:weightSum="2">
        <TextView
            android:id="@+id/car_layout_name"
            android:textSize="17sp"
            android:maxLines="1"
            android:textColor="@color/black"
            android:ellipsize="end"
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_weight="1"/>
        <TextView
            android:id="@+id/car_layout_license"
            android:textSize="17sp"
            android:maxLines="1"
            android:ellipsize="end"
            android:textColor="@color/black"
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_weight="1"/>
    </LinearLayout>

这是我的代码:

    if (userVehicleID != null) {
        carLayout.setWeightSum(2);
        carLicense.setText("test");
    }else{
        carLayout.setWeightSum(1);
        carLicense.setVisibility(View.GONE);
    } 

但即便如此,如果我调试,它进入 ELSE ,它只会显示第一个 textview,但它不会居中。为什么?

您需要触发布局更新 (requestLayout()) 以使布局在更改 weightSum 并隐藏视图后重新计算其子项

不要更改 weightSum 或指定 textAlignment。 由于您将 weightSum 设置为 2,因此它会占用所有可用高度并仅在视图顶部设置文本。

只需从父布局中删除 android:weightSum

因此,如果您将任何子项的可见性设置为 GONE,那么另一个子项将覆盖 weight.If 在您的情况下,在将子项设为 [=12] 之后,父级布局为 wrap_content =],这将使您的父 LinearLayout 高度等于 VISIBLE TextView 的高度。这就是 layout_weight 的工作方式。

<LinearLayout
    android:id="@+id/car_linear_layout"
    android:layout_toRightOf="@id/car_image"
    android:layout_width="wrap_content"
    android:orientation="vertical"
    android:layout_centerVertical="true"
    android:gravity="center_vertical"
    android:layout_height="50sp"
   >
    <TextView
        android:id="@+id/car_layout_name"
        android:textSize="17sp"
        android:maxLines="1"
        android:textColor="@color/black"
        android:ellipsize="end"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_weight="1"/>
    <TextView
        android:id="@+id/car_layout_license"
        android:textSize="17sp"
        android:maxLines="1"
        android:ellipsize="end"
        android:textColor="@color/black"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_weight="1"/>
</LinearLayout>