1. 程式人生 > >Android-0.Android Studio佈局中layout_weight用法

Android-0.Android Studio佈局中layout_weight用法

 Indicates how much of the extra space in the LinearLayout is allocated to the view associated with these LayoutParams. Specify 0 if the view should not be stretched. Otherwise the extra pixels will be pro-rated among all views whose weight is greater than 0.

指示LinearLayout中多少額外空間分配給與這些LayoutParams關聯的檢視。 如果檢視不應被拉伸,請指定0。 否則,額外空間將在權重大於0的所有檢視中按比例分配。

上面有幾點:

1.額外空間,指的是剩餘空閒空間, 額外空間將在權重大於0的所有檢視中按比例分配。

如下,總權重為1+1=2

第一個控制元件是比第二個控制元件佔的空間小的,即w(12345)+1/2空閒空間< w(123456)+1/2控制元件

<LinearLayout 
  android:orientation="horizontal">
  <TextView 
      android:layout_width="wrap_content"
      android:layout_height="wrap_height"
      android:layout_weight="1"
      android:text="12345"/>

  <TextView 
      android:layout_width="wrap_content"
      android:layout_height="wrap_height"
      android:layout_weight="1"
      android:text="123456"/>
</LinearLayout>

如果我們讓控制元件的寬度定義為layout_width="0dp" ,這樣比如2個控制元件的 layout_weight="1" 就可以各自50%平分整個空間了,因為:0 + 1/2空閒空間 = 0 + 1/2空閒空間。

2.預設layout_weight為0,所以如果這麼寫:

<LinearLayout 
    android:orientation="horizontal">

    <TextView
        android:layout_width="40dp"
        android:layout_height="match_parent"
        android:background="#000" />

    <Button
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"/>

    <TextView
        android:layout_width="40dp"
        android:layout_height="match_parent"
        android:background="#888" />

</LinearLayout>

則總權重為1,即Button佔了所有剩餘空閒空間,無論它在哪個位置

3.在排列方向上設定了match_parent, 如下,權重為2,1,2

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content" 
            android:text="1"
            android:layout_weight="2"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="2"
            android:layout_weight="1"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="3"
            android:layout_weight="2"/>

執行結果如下:

分析:因為設定的都是match_parent,所以如果沒有設定權重,三個Button只會顯示第一個,其他會被覆蓋,但是設定了權重後, 我們就按三個Button給定的width=match_parent計算剩餘空間

剩餘空間=1個match_parent空間-3個match_parent空間= -2個match_parent空間(負2)

所以

Button1所佔空間 = 1個match_parent空間+(-2個match_parent空間)*2/5 = 1/5個match_parent空間

Button2所佔空間 = 1個match_parent空間+(-2個match_parent空間)*1/5 = 3/5個match_parent空間

Button3所佔空間 = 1個match_parent空間+(-2個match_parent空間)*2/5 = 1/5個match_parent空間

所以在統一設定match_parent時,會有這麼一個特性,權重越大,空間越小。

而且在某個控制元件權重剛好為另外的所有控制元件權重之和時,這個控制元件會消失。

如權重變為1,2,3

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content" 
            android:text="1"
            android:layout_weight="2"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="2"
            android:layout_weight="1"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="3"
            android:layout_weight="2"/>

執行結果如下:

同樣的演算法:

Button1所佔空間 = 1個match_parent空間+(-2個match_parent空間)*1/6 = 2/3個match_parent空間

Button2所佔空間 = 1個match_parent空間+(-2個match_parent空間)*2/6 = 1/3個match_parent空間

Button3所佔空間 = 1個match_parent空間+(-2個match_parent空間)*3/6 = 0個match_parent空間

剩餘佈局大小 = 父佈局大小 - 子佈局大小之和