Android布局是應(yīng)用界面開發(fā)的重要一環(huán)及汉,在Android中沮趣,共有五種布局方式,分別是:
- LinearLayout (線性布局)
- RelativeLayout(相對布局)
- FrameLayout(幀布局)
- TableLayout(表格布局)GridLayout 網(wǎng)格布局
- AbsoluteLayout(絕對布局)
LinearLayout (線性布局)
LinearLayout是一種線型的布局方式坷随。LinearLayout布局容器內(nèi)的組件一個挨著一個地排列起來:不僅可以控制個組件橫向排列房铭,也可控制各組件縱向排列。
- android:orientation 屬性指定了排列方向是 vertical温眉,如果指定的是horizontal育叁,控件就會在水平方向上排列了。
- android:gravity 是用 于指定文字在控件中的對齊方式
- android:layout_gravity 是用于指定控件在布局中的對齊 方式 RelativeLayout 相對布局
- android:layout_weight="1"(權(quán)重分布)芍殖,這個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 --- 為控件指定相應(yīng)的ID
android:text --- 指定控件當(dāng)中顯示的文字砾淌,需要注意的是啦撮,這里盡量使用strings.xml文件當(dāng)中的字符串
android:grivity --- 指定控件的基本位置,比如說居中汪厨,居右等位置這里指的是控件中的文本位置并不是控件本身赃春。
android:textSize --- 指定控件當(dāng)中字體的大小
android:background --- 指定該控件所使用的背景色,RGB命名法
android:width --- 指定控件的寬度
android:height --- 指定控件的高度
android:padding* --- 指定控件的內(nèi)邊距劫乱,也就是說控件當(dāng)中的內(nèi)容
android:sigleLine --- 如果設(shè)置為真的話聘鳞,則控件的內(nèi)容在同一行中進行顯示
FrameLayout(幀布局)
FrameLayout對象好比一塊在屏幕上提前預(yù)定好的空白區(qū)域,可以將一些元素填充在里面要拂,如圖片抠璃。所有元素都被放置在FrameLayout區(qū)域的最左上區(qū)域,而且無法為這些元素制指定一個確切的位置脱惰,若有多個元素搏嗡,那么后面的元素會重疊顯示在前一個元素上。
TableLayout(表格布局)
TableLayout是指將子元素的位置分配到行或列中拉一。Android的一個TableLayout有許多TableRow組成采盒,每一個TableRow都會定義一個Row限佩。TableLayout容器不會顯示Row植兰,Column,及Cell的邊框線讽挟,每個Row擁有0個或多個Cell嫡纠,每個Cell擁有一個View對象烦租。在使用tablelayout時,應(yīng)注意每一個cell的寬度除盏。
(1)TableLayout行列數(shù)的確定
- TableLayout的行數(shù)由開發(fā)人員直接指定叉橱,即有多少個TableRow對象(或View控件),就有多少行
- TableLayout的列數(shù)等于含有最多子控件的TableRow的列數(shù)者蠕。如第一TableRow含2個子控件窃祝,第二個TableRow含3個,第三個TableRow含4個踱侣,那么該TableLayout的列數(shù)為4.
(2)TableLayout可設(shè)置的屬性詳解
TableLayout可設(shè)置的屬性包括全局屬性及單元格屬性粪小。
- 全局屬性也即列屬性大磺,有以下3個參數(shù):
android:stretchColumns 設(shè)置可伸展的列。該列可以向行方向伸展探膊,最多可占據(jù)一整行杠愧。
android:shrinkColumns 設(shè)置可收縮的列。當(dāng)該列子控件的內(nèi)容太多突想,已經(jīng)擠滿所在行殴蹄,那么該子控件的內(nèi)容將往列方向顯示究抓。
android:collapseColumns 設(shè)置要隱藏的列猾担。
示例:
android:stretchColumns="0" 第0列可伸展
android:shrinkColumns="1,2" 第1,2列皆可收縮
android:collapseColumns="*" 隱藏所有行
說明:列可以同時具備stretchColumns及shrinkColumns屬性,若此刺下,那么當(dāng)該列的內(nèi)容N多時绑嘹,將“多行”顯示其內(nèi)容。(這里不是真正的多行橘茉,而是系統(tǒng)根據(jù)需要自動調(diào)節(jié)該行的layout_height)
- 單元格屬性工腋,有以下2個參數(shù):
android:layout_column 指定該單元格在第幾列顯示
android:layout_span 指定該單元格占據(jù)的列數(shù)(未指定時,為1)
示例:
android:layout_column="1" 該控件顯示在第1列
android:layout_span="2" 該控件占據(jù)2列
說明:一個控件也可以同時具備這兩個特性畅卓。
GridLayout 網(wǎng)格布局
GridLayout布局使用虛細線將布局劃分為行擅腰、列和單元格,也支持一個控件在行翁潘、列上都有交錯排列趁冈。而GridLayout使用的其實是跟LinearLayout類似的API,只不過是修改了一下相關(guān)的標(biāo)簽而已拜马,所以對于開發(fā)者來說渗勘,掌握GridLayout還是很容易的事情。GridLayout的布局策略簡單分為以下三個部分:
- 首先它與LinearLayout布局一樣俩莽,也分為水平和垂直兩種方式旺坠,默認是水平布局,一個控件挨著一個控件從左到右依次排列扮超,但是通過指定Android:columnCount設(shè)置列數(shù)的屬性后取刃,控件會自動換行進行排列。另一方面出刷,對于GridLayout布局中的子控件蝉衣,默認按照wrap_content的方式設(shè)置其顯示,這只需要在GridLayout布局中顯式聲明即可巷蚪。
- 其次病毡,若要指定某控件顯示在固定的行或列,只需設(shè)置該子控件的android:layout_row和android:layout_column屬性即可屁柏,但是需要注意:android:layout_row=”0”表示從第一行開始啦膜,android:layout_column=”0”表示從第一列開始有送,這與編程語言中一維數(shù)組的賦值情況類似。
- 最后僧家,如果需要設(shè)置某控件跨越多行或多列雀摘,只需將該子控件的android:layout_rowSpan或者layout_columnSpan屬性設(shè)置為數(shù)值,再設(shè)置其layout_gravity屬性為fill即可八拱,前一個設(shè)置表明該控件跨越的行數(shù)或列數(shù)阵赠,后一個設(shè)置表明該控件填滿所跨越的整行或整列。
AbsoluteLayout
android:layout_x 指定控件在父布局的x軸坐標(biāo)
android:layout_y 指定控件在父布局的 y軸坐標(biāo)
AbsoluteLayout(絕對布局)
絕對布局極少使用肌稻,在不是絕對要使用的情況下就絕對不要用