2011-04-22

Android Layout Managers - LinearLayout

Layout manager 主要用來設定元件的位置與大小,Android 內建以下幾種 layout manager:
  • LinearLayout
  • TableLayout
  • RelativeLayout
  • FrameLayout
  • AbsoluteLayout - deprecated
除了 FrameLayout 以外,其他的 layout manager 功能從名稱大概都猜得出來。


LinearLayout

以水平或垂直方向一個接一個排隊。

orientation - horizontal / vertical
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
  <Button 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="新遊戲"/>
  <Button 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="設定"/>
  <Button 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="離開"/>
</LinearLayout>

layout_width / layout_height - fill_parent / wrap_content
  • fill_parent - 以 parent container 的寬度或高度為依據,也就是使用到最大極限。
  • wrap_content - 以 container 內的內容寬度或高度為依據,也就是隨著內容而變化。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
        <Button 
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="新遊戲"/>
        <Button 
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="設定"/>
        <Button 
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="離開"/>
</LinearLayout>

在 parent 的 layout_width 與 layout_height 都用 filll_parent 的情況下,如果三個  Button 的 layout_width 與 layout_height 都用 filll_parent 的話,會只看到第一個 Button 佔滿整個螢幕,看不到其他兩個 Button,如果前兩個 Button 的 layout_height 是用 wrap_content,而最後一個的 layout_height 是用 fill_content,則會出現前兩個 Button 正常顯示,然後最後一個 Button 佔滿所有剩餘的空間。

layout-weight - 佔用空間的比例
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
        <Button 
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="新遊戲"/>
        <Button 
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="0"
                android:text="設定"/>
        <Button 
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="0"
                android:text="離開"/>
</LinearLayout>
0 表示使用原尺寸(layout_weight 的預設值),如果三個 Button 都用 1 的話,則三個 Button 會三等分整個螢幕,如果分別是 2、1、1 的話,則三個 Button 會佔滿整個螢幕,但是第一個 Button 的高度兩倍於其他兩個 Button。

gravity - 文字對齊方式,top / bottom / left / right / center / center_vertical / center_horizontal / fill_vertical / fill_horizontal / clip_vertical / clip_horizontal

layout_gravity - 元件對齊方式,top / bottom / left / right / center / center_vertical / center_horizontal / fill_vertical / fill_horizontal / clip_vertical / clip_horizontal
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
        <Button 
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="top"                
                android:layout_gravity="left"                
                android:text="新遊戲"/>
        <Button 
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"                
                android:layout_gravity="center"                
                android:text="設定"/>
        <Button 
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="bottom"                
                android:layout_gravity="right"                
                android:text="離開"/>
</LinearLayout>
若要使用 layout_gravity,該元件的 layout_width / layout_height 必須是 wrap_content 才有用。

沒有留言:

張貼留言