2016/03/04

Android 利用 layout_weight 屬性來設定物件的版面所佔比例 (權重) (平均分配)

在 Android 版面設計中,

關於版面 weight 權重的設計,

可以用 Layout 搭配 android:layout_weight 屬性,

或用以下程式碼設定 :
 程式碼
obj.setLayoutParams( new LayoutParams( LayoutParams.WRAP_CONTENT
                                     , LayoutParams.WRAP_CONTENT
                                     , 1f  // 權重值
                                     ) );

均可以實現物件在版面中所佔的比例 (權重),

1)
優先權的判斷:

若是 水平排列, 則 layout_width = 數值 > layout_weight (需搭配 layout_width = WRAP_CONTENT)

若是 垂直排列, 則 layout_height= 數值 > layout_weight (需搭配 layout_height= WRAP_CONTENT)

2)
該屬性值預設為 0, 也就是不會自動分配.

範例, 參考如下 :

Layout 範例 :
 Layout XML
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Button 1"
            />
        
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:text="Button 2"
            />
    </LinearLayout>
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Button 3"
            />
        
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Button 4"
            />
    </LinearLayout>
</LinearLayout>

程式範例 :
 程式碼
public class TomTest extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView( R.layout.main_test );
    }
}

範例結果 :
(Button1 與 Button2 的 layout_weight 比例為 1:2, 照理說, 顯示寬度比也要為 1:2)
(但實際上顯示非如此, 這點實在不清楚原因, 但可以改用程式中動態設定寬度)