1. 程式人生 > >Android 線性佈局常用屬性

Android 線性佈局常用屬性

內容概覽

  • Gravity
  • Padding
  • Weight

gravity與layout_gravity

android:gravity:
用於設定該控制元件中內容相對於該控制元件的對齊方式
android:layout_gravity:
用於設定該控制元件相對於父控制元件的對齊方式

一個屬性可以包含多個值,需用”|”分開。其含義如下:
這裡寫圖片描述

這裡寫圖片描述
這裡寫圖片描述

padding與margin邊距

android:padding:
用於設定該控制元件中內容相對於該控制元件的邊距,即內邊距。
android:layout_margin:
用於設定該控制元件相對於其他控制元件的邊距

,即外邊距。
這裡寫圖片描述

這裡寫圖片描述
這裡寫圖片描述

Weight

layout_weight的值用於在線性佈局中指定父控制元件剩餘空間的分配比例。
這裡寫圖片描述

這裡寫圖片描述
這裡寫圖片描述
淡藍色區域就是first和second控制元件的父控制元件的剩餘空間。當我們分別在兩個textView中新增android:layout_weight=”1”時候就變成了
這裡寫圖片描述

也就是這個父控制元件剩餘空間被1:1的平均分成兩份,此時父控制元件就已經被這兩個子控制元件填滿了。
但問題是:first和second是按照1:1的比例把這個父控制元件平分了嗎?
答案是否定的。first的寬度本身比second小,通過weight只是把父控制元件的剩餘空間1:1平均分配,而first的寬度和second寬度並不相同。
被設定weight值的控制元件,寬度應為該控制元件的原寬度+父控制元件的剩餘空間乘以比例


水平方向的線性佈局中:使用weight時,需注意將寬度設定為0dp
垂直方向的線性佈局中:使用weight時,需注意將高度設定為0dp

面試題中會經常考這樣一個題:
如果把兩個TextView中的寬度設定為match_parent,那麼兩個控制元件的比例是相反的。
這裡寫圖片描述
計算公式如下:
first的寬度:match_parent(原寬度)+(match_parent(父控制元件寬度)-(match_parent+match_parent)(兩個子控制元件寬度))*1/3
設match_parent為a
first的寬度:a+(a-2a)*1/3
=a-1/3a
=2/3a
first的寬度為父控制元件寬度的2/3
second的寬度:a+(a-2a)*2/3
=a-2/3a
=1/3a