前言
需求:給頭像添加一個右上角動態計數。
由於誤以爲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"
結果就變成整整齊齊,而且不會由於 右上角 圖標的操作影響到其他佈局,健壯性加強。