Android布局是應用界面開發的重要一環,在Android中,共有五種布局方式,分別是:
- LinearLayout (線性布局)
- RelativeLayout(相對布局)
- FrameLayout(幀布局)
- TableLayout(表格布局)GridLayout 網格布局
- AbsoluteLayout(絕對布局)
LinearLayout (線性布局)
LinearLayout是一種線型的布局方式。LinearLayout布局容器內的組件一個挨著一個地排列起來:不僅可以控制個組件橫向排列,也可控制各組件縱向排列。
- android:orientation 屬性指定了排列方向是 vertical,如果指定的是horizontal,控件就會在水平方向上排列了。
- android:gravity 是用 于指定文字在控件中的對齊方式
- android:layout_gravity 是用于指定控件在布局中的對齊 方式 RelativeLayout 相對布局
- android:layout_weight="1"(權重分布),這個weight在垂直布局時,代表行距;水平的時候代表列寬;weight值越大就越大。
- android:visibility=invisible控制布局是否顯示 :1、顯示 visible 2、不顯示,但占空間 invisible 3、隱藏 gone
RelativeLayout(相對布局)
是一種相對布局,控件的位置是按照相對位置來計算的,后一個控件在什么位置依賴于前一個控件的基本位置,是布局最常用,也是最靈活的一種布局。
分類方式一
a)、第一類:屬性值為true或false
android:layout_centerHrizontal 水平居中
android:layout_centerVertical 垂直居中
android:layout_centerInparent 相對于父元素完全居中
android:layout_alignParentBottom 貼緊父元素的下邊緣
android:layout_alignParentLeft 貼緊父元素的左邊緣
android:layout_alignParentRight 貼緊父元素的右邊緣
android:layout_alignParentTop 貼緊父元素的上邊緣
b)、第二類:屬性值必須為id的引用名“@id/id-name”
android:layout_below 在某元素的下方
android:layout_above 在某元素的的上方
android:layout_toLeftOf 在某元素的左邊
android:layout_toRightOf 在某元素的右邊
android:layout_alignTop 本元素的上邊緣和某元素的的上邊緣對齊
android:layout_alignLeft 本元素的左邊緣和某元素的的左邊緣對齊
android:layout_alignBottom 本元素的下邊緣和某元素的的下邊緣對齊
android:layout_alignRight 本元素的右邊緣和某元素的的右邊緣對齊
c)、第三類:屬性值為具體的像素值,如30dip,40px
android:layout_marginBottom 離某元素底邊緣的距離
android:layout_marginLeft 離某元素左邊緣的距離
android:layout_marginRight 離某元素右邊緣的距離
android:layout_marginTop 離某元素上邊緣的距離
分類方式二
android:layout_marginTop="25dip" //頂部距離
android:gravity="left" //空間布局位置
android:layout_marginLeft="15dip //距離左邊距
相對于給定ID控件
android:layout_above 將該控件的底部置于給定ID的控件之上;
android:layout_below 將該控件的底部置于給定ID的控件之下;
android:layout_toLeftOf 將該控件的右邊緣與給定ID的控件左邊緣對齊;
android:layout_toRightOf 將該控件的左邊緣與給定ID的控件右邊緣對齊;
android:layout_alignBaseline 將該控件的baseline與給定ID的baseline對齊;
android:layout_alignTop 將該控件的頂部邊緣與給定ID的頂部邊緣對齊;
android:layout_alignBottom 將該控件的底部邊緣與給定ID的底部邊緣對齊;
android:layout_alignLeft 將該控件的左邊緣與給定ID的左邊緣對齊;
android:layout_alignRight 將該控件的右邊緣與給定ID的右邊緣對齊;
相對于父組件
android:layout_alignParentTop 如果為true,將該控件的頂部與其父控件的頂部對齊;
android:layout_alignParentBottom 如果為true,將該控件的底部與其父控件的底部對齊;
android:layout_alignParentLeft 如果為true,將該控件的左部與其父控件的左部對齊;
android:layout_alignParentRight 如果為true,將該控件的右部與其父控件的右部對齊;
居中
android:layout_centerHorizontal 如果為true,將該控件的置于水平居中;
android:layout_centerVertical 如果為true,將該控件的置于垂直居中;
android:layout_centerInParent 如果為true,將該控件的置于父控件的中央;
指定移動像素
android:layout_marginTop 上偏移的值;
android:layout_marginBottom 下偏移的值;
android:layout_marginLeft 左偏移的值;
android:layout_marginRight 右偏移的值;
基本屬性
android:id --- 為控件指定相應的ID
android:text --- 指定控件當中顯示的文字,需要注意的是,這里盡量使用strings.xml文件當中的字符串
android:grivity --- 指定控件的基本位置,比如說居中,居右等位置這里指的是控件中的文本位置并不是控件本身。
android:textSize --- 指定控件當中字體的大小
android:background --- 指定該控件所使用的背景色,RGB命名法
android:width --- 指定控件的寬度
android:height --- 指定控件的高度
android:padding* --- 指定控件的內邊距,也就是說控件當中的內容
android:sigleLine --- 如果設置為真的話,則控件的內容在同一行中進行顯示
FrameLayout(幀布局)
FrameLayout對象好比一塊在屏幕上提前預定好的空白區域,可以將一些元素填充在里面,如圖片。所有元素都被放置在FrameLayout區域的最左上區域,而且無法為這些元素制指定一個確切的位置,若有多個元素,那么后面的元素會重疊顯示在前一個元素上。
TableLayout(表格布局)
TableLayout是指將子元素的位置分配到行或列中。Android的一個TableLayout有許多TableRow組成,每一個TableRow都會定義一個Row。TableLayout容器不會顯示Row,Column,及Cell的邊框線,每個Row擁有0個或多個Cell,每個Cell擁有一個View對象。在使用tablelayout時,應注意每一個cell的寬度。
(1)TableLayout行列數的確定
- TableLayout的行數由開發人員直接指定,即有多少個TableRow對象(或View控件),就有多少行
- TableLayout的列數等于含有最多子控件的TableRow的列數。如第一TableRow含2個子控件,第二個TableRow含3個,第三個TableRow含4個,那么該TableLayout的列數為4.
(2)TableLayout可設置的屬性詳解
TableLayout可設置的屬性包括全局屬性及單元格屬性。
- 全局屬性也即列屬性,有以下3個參數:
android:stretchColumns 設置可伸展的列。該列可以向行方向伸展,最多可占據一整行。
android:shrinkColumns 設置可收縮的列。當該列子控件的內容太多,已經擠滿所在行,那么該子控件的內容將往列方向顯示。
android:collapseColumns 設置要隱藏的列。
示例:
android:stretchColumns="0" 第0列可伸展
android:shrinkColumns="1,2" 第1,2列皆可收縮
android:collapseColumns="*" 隱藏所有行
說明:列可以同時具備stretchColumns及shrinkColumns屬性,若此,那么當該列的內容N多時,將“多行”顯示其內容。(這里不是真正的多行,而是系統根據需要自動調節該行的layout_height)
- 單元格屬性,有以下2個參數:
android:layout_column 指定該單元格在第幾列顯示
android:layout_span 指定該單元格占據的列數(未指定時,為1)
示例:
android:layout_column="1" 該控件顯示在第1列
android:layout_span="2" 該控件占據2列
說明:一個控件也可以同時具備這兩個特性。
GridLayout 網格布局
GridLayout布局使用虛細線將布局劃分為行、列和單元格,也支持一個控件在行、列上都有交錯排列。而GridLayout使用的其實是跟LinearLayout類似的API,只不過是修改了一下相關的標簽而已,所以對于開發者來說,掌握GridLayout還是很容易的事情。GridLayout的布局策略簡單分為以下三個部分:
- 首先它與LinearLayout布局一樣,也分為水平和垂直兩種方式,默認是水平布局,一個控件挨著一個控件從左到右依次排列,但是通過指定Android:columnCount設置列數的屬性后,控件會自動換行進行排列。另一方面,對于GridLayout布局中的子控件,默認按照wrap_content的方式設置其顯示,這只需要在GridLayout布局中顯式聲明即可。
- 其次,若要指定某控件顯示在固定的行或列,只需設置該子控件的android:layout_row和android:layout_column屬性即可,但是需要注意:android:layout_row=”0”表示從第一行開始,android:layout_column=”0”表示從第一列開始,這與編程語言中一維數組的賦值情況類似。
- 最后,如果需要設置某控件跨越多行或多列,只需將該子控件的android:layout_rowSpan或者layout_columnSpan屬性設置為數值,再設置其layout_gravity屬性為fill即可,前一個設置表明該控件跨越的行數或列數,后一個設置表明該控件填滿所跨越的整行或整列。
AbsoluteLayout
android:layout_x 指定控件在父布局的x軸坐標
android:layout_y 指定控件在父布局的 y軸坐標
AbsoluteLayout(絕對布局)
絕對布局極少使用,在不是絕對要使用的情況下就絕對不要用