【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"

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章