Android布局:variable_two设为GONE时如何让variable_one在父布局居中
解决方案
仅需修改两个变量布局的属性即可实现需求,无需调整原有控制可见性的逻辑代码,改动点如下:
- 将
variable_one的android:layout_height属性从wrap_content改为0dp,新增android:layout_weight="1"属性,同时给variable_one增加android:gravity="center"保证内部内容居中 - 将
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
相关产品推荐
相关产品推荐

