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

結果就變成整整齊齊,而且不會由於 右上角 圖標的操作影響到其他佈局,健壯性加強。

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