You need to enable JavaScript to run this app. Android布局:variable_two设为GONE时如何让variable_one在父布局居中
优惠活动
大模型
产品
解决方案
定价
更多

Android布局:variable_two设为GONE时如何让variable_one在父布局居中

解决方案

仅需修改两个变量布局的属性即可实现需求,无需调整原有控制可见性的逻辑代码,改动点如下:

  1. 将variable_one的android:layout_height属性从wrap_content改为0dp,新增android:layout_weight="1"属性,同时给variable_one增加android:gravity="center"保证内部内容居中
  2. 将variable_two的android:layout_height属性从wrap_content改为0dp,新增android:layout_weight="1"属性

修改后的核心代码片段参考:

<!-- 房间名称布局保持完全不变,位置始终固定 -->
<me.grantland.widget.AutofitTextView
    android:id="@+id/roomname"
    style="@style/SingleRoomNameStyle"
    android:layout_height="wrap_content"/>

<LinearLayout
    android:id="@+id/variable_one"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:gravity="center"
    android:orientation="vertical">
    <!-- 内部子控件无需修改 -->
    <TextView android:id="@+id/label"
        android:layout_width="wrap_content"
        android:layout_height="46px"
        android:textColor="#CFFFFFFF"
        android:textStyle="normal"
        android:textSize="25sp"
        android:text="@string/Name"
        android:layout_gravity="center"
        android:gravity="center"/>
    <me.grantland.widget.AutofitTextView
        android:id="@+id/value"
        android:layout_width="wrap_content"
        android:layout_height="101px"
        android:paddingLeft="48dp"
        android:paddingRight="48dp"
        android:layout_gravity="center"
        android:gravity="center"
        android:minWidth="200dp"
        android:text="0.0000"
        android:textColor="#FFFFFF"
        android:textSize="55dp"
        android:textStyle="bold"
        android:maxLines="2"
        app:sizeToFit="true"/>
</LinearLayout>

<LinearLayout
    android:id="@+id/variable_two"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:orientation="vertical">
    <!-- 内部子控件无需修改 -->
    <Space
        android:id="@+id/spacer"
        android:layout_width="match_parent"
        android:layout_height="30dp" />
    <TextView android:id="@+id/label_two"
        android:layout_width="wrap_content"
        android:layout_height="46px"
        android:textColor="#CFFFFFFF"
        android:textStyle="normal"
        android:textSize="25sp"
        android:text="@string/Name"
        android:layout_gravity="center"
        android:gravity="center"/>
    <me.grantland.widget.AutofitTextView
        android:id="@+id/value_two"
        android:layout_width="wrap_content"
        android:layout_height="189px"
        android:paddingLeft="48dp"
        android:paddingRight="48dp"
        android:layout_gravity="center"
        android:gravity="top|center_horizontal"
        android:minWidth="200dp"
        android:text="0.0000"
        android:textColor="#FFFFFF"
        android:textSize="55dp"
        android:textStyle="bold"
        android:maxLines="2"
        app:sizeToFit="true"/>
</LinearLayout>

实现效果说明

  • 正常模式:两个变量布局均分房间名称下方的剩余空间,展示效果和原有逻辑完全一致
  • 错误模式:variable_two设为GONE后,所有剩余空间会自动分配给variable_one,variable_one占满剩余空间后内部内容自动居中,且顶部房间名称的位置完全固定,符合所有需求要求。

原理

LinearLayout的layout_weight属性用于分配父布局的剩余空间,当子控件的高度设为0dp时,weight值就代表该控件占剩余空间的比例,其中一个控件隐藏后,剩余空间会全部分配给另一个设置了weight的控件。

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 17:36:13