【Android】Relative布局之gravity坑

前言

需求:给头像添加一个右上角动态计数。

由于误以为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"

结果就变成整整齐齐,而且不会由于 右上角 图标的操作影响到其他布局,健壮性加强。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值