前言
需求:给头像添加一个右上角动态计数。
由于误以为Relative的gravity是对每一个子布局进行控制,所以造成了一些傻逼的后果。
正文
xml布局文件
<RelativeLayout
android:id="@+id/rl_message"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginRight="9dp"
android:gravity="center"
android:layout_marginTop="10dp"
android:background="@color/common_27ad9a">
<com.common.base.view.widget.RoundAngleImageView
android:id="@+id/iv_img"
android:layout_width="50dp"
android:layout_height="50dp"
android:scaleType="fitXY"
app:round="5dp"
tools:src="@drawable/common_ic_empty"/>
<TextView
android:id="@+id/tv_dynamic_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignTop="@id/temp_message_icon"
android:background="@drawable/common_shape_radius_red_f06755"
android:gravity="center"
android:minWidth="16dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:text="99"
android:textColor="@color/common_white"
android:textSize="11dp"
android:visibility="gone"
tools:visibility="visible" />
</RelativeLayout>
预览结果:
如图所示
解析:
1.父布局relative设置gravity为center。(注意:gravity控制内容位置,layout_gravity控制相对父布局位置)
2.修改代码将 右上角"99"图标设置为gone
tools:visibility="gone"
你会惊人的发现
内部头像居中了。
所以,可以说明gravity不是针对每一个子组件,而是将子组件组合在一起算出整体位置。
后果就是:
在你做右上角图标显隐时会出现列表不对齐。这时候你可能会使用invisible属性来控制。确实,第4个图标就是使用了
但是,我们可能就要修改代码内部的控制,这可能会引起之前版本的布局出现不可预测的问题。
解决方法
1.取消父布局的
android:gravity="center"
2.头像使用相对布局layout_centerInParent属性
android:layout_centerInParent="true"
结果就变成整整齐齐,而且不会由于 右上角 图标的操作影响到其他布局,健壮性加强。