顧名思義,LinearLayout是指將佈局或者是控制項以線性的形式排布到佈局里;當然,此處就涉及到兩個方向的排布,只要將LinearLayout中的android:orientation屬性的屬性值設置為vertical(垂直方向)和horizontal(水平方向)即可。 線性佈局當中的一些常見屬性 ...
顧名思義,LinearLayout是指將佈局或者是控制項以線性的形式排布到佈局里;當然,此處就涉及到兩個方向的排布,只要將LinearLayout中的android:orientation屬性的屬性值設置為vertical(垂直方向)和horizontal(水平方向)即可。
線性佈局當中的一些常見屬性的說明:
屬性 |
屬性值 |
說明 |
android:id |
@+id/id_name |
設置 |
android:layout_width |
match_parent|wrap_content |
設置佈局的寬度 |
android:layout_height |
match_parent|wrap_content |
設置佈局的寬度 |
android:weight |
0|1|2… |
設置佈局的權重比例 |
android:orientation |
vertical|horizontal |
設置佈局的方向 |
android:gravity |
top|bottom|right|left… |
設置佈局內組件的對齊方式 |
android:layout_gravity |
top|bottom|right|left… |
設置佈局在父控制項的對齊方式 |
android:background |
RGB|十六進位 |
設置背景顏色 |
… |
… |
… |
但是線上性佈局當中還有個權重需要註意一下,分水平方向與豎直方向來講吧
1. 垂直佈局:
在佈局文件中輸入以下代碼,很顯然是垂直佈局,然後添加了三個TextView用來顯示佈局的特點,分別加以background屬性用來設置背景顏色以示區分,首先先將各個TextView組件的寬度設置為匹配父控制項,然後將高度設置為0dip,因為現在是垂直排布,所以權重的設置是關於控制項的高度的;再將三個控制項的權重設置為2:1:3。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="2"
android:background="#FF0000"
android:text="第一行"
android:textSize="24sp"
android:gravity="center"/>
<TextView
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:background="#00FF00"
android:text="第二行"
android:textSize="24sp"
android:gravity="center"/>
<TextView
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="3"
android:background="#0000FF"
android:text="第三行"
android:textSize="24sp"
android:gravity="center"/>
</LinearLayout>
可以看到其佈局格式如下麵圖左所示,看上去也就是2:1:3了。然後將上述代碼中的高度的屬性值改為match_parent,也就是說每一個控制項的高度都設置為了占滿一個屏幕,在實際中,如果設置前面的控制項已經占滿了屏幕之後,那麼後面的控制項因為沒有屏幕可以分配給他,所以會被擠到屏幕之外。但是可以觀察到佈局格式如下圖右所示:第三個控制項已經沒了,但是第一個和第二個卻是看上去1:2的比例。
出現圖左的格式是因為高度都設置為0,此時就還剩下一整個空白的屏幕能夠按照之前設置的權重比例來分配各控制項的高度。即第一個分配2/(2+1+3)的區間,第二個分配1/(2+1+3)的區間,第三個就分配3/(2+1+3)的區間
而出現右圖的情況是因為每一個控制項的高度都設置為匹配父控制項,因此要將三個控制項都完全的顯示在屏幕中,理論上是需要三塊屏幕來顯示的;不過實際上只有一個屏幕,當前面的控制項將屏幕占滿之後,後面的控制項就會因為沒有地方而被排擠在屏幕之外。因此,在此處。我們就缺少了兩塊屏幕用來顯示控制項。即缺少-2;但是因為此處設置了權重,所以缺少的部分就需要三個控制項按照其權重比來減少各自的部分。即有:第一個要在match_parent的基礎上減少(-2)*2/6的地方;第二個需要減少(-2)*1/6的地方;同樣的,第三個需要減少(-2)*3/6的地方;綜上所述,三個控制項剩下部分的比值就是[1-(-2)*2/6]:[1-(-2)*1/6]:[1-(-2)*3/6]=1:2:0
思考,當上述代碼中高度設置為match_parent,權重設置為2:2:3又會如何?
2. 水平佈局:
關於水平佈局只需將上述代碼中的android:orientation屬性設置為horizontal即可,具體的不再詳述