前言
在進(jìn)行Android開發(fā)中,常常需要用到各種布局來進(jìn)行UI的繪制,今天我們就來講下Android開發(fā)中最常用的五大布局介紹和相關(guān)屬性的設(shè)置。
目錄

Android五大布局介紹&屬性設(shè)置.jpg
一、布局介紹
在Android中,共有五種布局方式,分別是:
FrameLayout(框架布局)
LinearLayout(線性布局)
AbsoluteLayout(絕對(duì)布局)
RelativeLayout(相對(duì)布局)
TableLayout(表格布局)
1. FrameLayout框架布局
布局特點(diǎn):放入其中的所有元素都被放置在最左上的區(qū)域,而且無法為這些元素指定一個(gè)確切的位置,下一個(gè)子元素會(huì)重疊覆蓋上一個(gè)子元素
應(yīng)用場景:適合瀏覽單張圖片。
2. LinearLayout線性布局
布局特點(diǎn):放主要提供控件水平或者垂直排列的模型,每個(gè)子組件
都是以垂直或水平的方式來線性排布.(默認(rèn)是垂直)
應(yīng)用場景:最常用的布局方式
linearLayout中有一個(gè)重要的屬性 android:layout_weight="1",這個(gè)weight在垂直布局時(shí),代表行距;水平的時(shí)候代表列寬;weight值越大就越大。
3. AbsoluteLayout絕對(duì)定位布局
布局特點(diǎn):采用坐標(biāo)軸的方式定位組件,左上角是(0,0)點(diǎn),往右x軸遞增,往下Y軸遞增,組件定位屬性為android:layout_x和 android:layout_y來確定坐標(biāo)。
應(yīng)用場景:準(zhǔn)確定位空間位置
由于Android手機(jī)的屏幕尺寸、分辨率存在較大差異,使用AbsoluteLayout無法兼顧適配問題,所以該布局已經(jīng)過時(shí)
4. RelativeLayout相對(duì)布局
布局特點(diǎn):為某一個(gè)組件為參照物,來定位下一個(gè)組件的位置的布局方式。
應(yīng)用場景:控件之間存在相應(yīng)關(guān)系(適配神器,推薦使用)
5. TableLayout表格布局
布局特點(diǎn):類似Html里的Table.使用TableRow來布局,其中TableRow代表一行,TableRow的每一個(gè)視圖組件代表一個(gè)單元格。
應(yīng)用場景:控件之間存在相應(yīng)關(guān)系。
這五個(gè)布局元素可以相互嵌套應(yīng)用,做出美觀的界面。
二、布局屬性配置
Android布局里XML的屬性配置
1. 五種Layout中Item的基礎(chǔ)屬性:
layout_width & layout_height
layout_margin+方位 & padding+方位
layout_gravity & gravity
Android五種布局都具備上述幾個(gè)基礎(chǔ)屬性
1. layout_width? &? layout_height
作用:設(shè)置Layout中組件的寬度和高度
取值:
a. 固定的像素值
android:layout_width="66px"
b. "wrap_content"
相應(yīng)視圖的寬和高就會(huì)被設(shè)定成所需的最小尺寸以適應(yīng)視圖中的內(nèi)容
android:layout_width="wrap_content"
c. “match_parent"(在Android API 8之前叫作"fill_parent")
視圖的寬和高延伸至充滿整個(gè)父布局
android:layout_width="match_parent"
2. layout_margin+方位/padding+方位
作用:設(shè)置放入Layout中的View與Layout的邊界或者其他View之間能夠相距一段距離
設(shè)置:
layout_marginLeft? ? ? ? ? //paddingLeft
layout_marginTop? ? ? ? //paddingTop
layout_marginRight? ? ? //paddingRight
layout_marginBottom? //paddingBottom
layout_margin? ? ? ? ? ? //padding
取值:固定值
android:layout_marginLeft="66px"
//android:paddingLeft=”66px“
paddingLeft與android:layout_marginLeft的區(qū)別:
padding和margin都是邊距的含義,但二者邊距的定義不同:
padding是控件的內(nèi)容相對(duì)控件的邊緣的邊距;
layout_margin是控件邊緣相對(duì)父控件的邊距。具體如下圖:
padding屬性與margin屬性的區(qū)別
3. layout_gravity / gravity
作用:用來確定View在Layout中的??课恢?/p>
android gravity和layout_gravity區(qū)別:
gravity屬性:是對(duì)該view 內(nèi)容的位置的設(shè)置。
比如一個(gè)button 上面的text. 你可以設(shè)置該text 在view的靠左,靠右等位置.
layout_gravity屬性:是用來設(shè)置該view相對(duì)與父view 的位置。
比如一個(gè)button 在Linearlayout里,你可以通過設(shè)置該屬性把該button放在父布局Linearlayout靠左靠右等位置。
2. 各種Layout的特有屬性
2.1 FrameLayout
作為最簡單的Layout,只具備基礎(chǔ)屬性:
layout_width & layout_height
layout_margin+方位 & padding+方位
layout_gravity & gravity
2.2 AbsoluteLayout
除了基礎(chǔ)屬性外,AbsoluteLayout還具備:
layout_x:指定控件的x坐標(biāo)
layout_y:指定控件的x坐標(biāo)
上述屬性的取值均為固定值。
2.3 TableLayout
除了基礎(chǔ)屬性外,由于TableLayout的行TableRow是一個(gè)橫向的(horizontal)的LinearLayout,所以具備LinearLayout的屬性
2.4 LinearLayout
除了基礎(chǔ)屬性,還會(huì)有:
orientation
1.作用:設(shè)置布局內(nèi)控件的排列方式
2.取值:vertical(垂直排列-默認(rèn)值)、horizontal(水平排列)
android:orientation="vertical";
//android:orientation="horizontal";
layout_weight
1.定義:是線性布局(Linelayout)的一個(gè)獨(dú)特比例分配屬性
2.作用:使用此屬性設(shè)置權(quán)重,然后按照比例對(duì)界面進(jìn)行空間的分配,公式計(jì)算是:控件寬度=控件設(shè)置寬度+剩余空間所占百分比寬幅
具體可以參考這篇文章,講解得非常詳細(xì)
2.5 RelativeLayout
RelativeLayout的屬性算是最多的了,除了基本屬性外,還有:
a. 相對(duì)于父空間
XML屬性 說明
layout_alignParentBottom 當(dāng)前控件底端與父控件的底端對(duì)齊
layout_alignParentLeft 當(dāng)前控件左端與父控件的左端對(duì)齊
layout_alignParentRight 當(dāng)前控件右端與父控件的右端對(duì)齊
layout_alignParentTop 當(dāng)前控件上端與父控件的上端對(duì)齊
layout_centerHorizontal 當(dāng)前控件位于父控件的橫向中間位置(水平方向上的中間)
layout_centerVertical 當(dāng)前控件位于父控件的縱向中間位置(平面上的正中間)
layout_centerInParent 當(dāng)前控件位于父控件的縱橫向中間位置(垂直方向上的中間)
上述所有屬性的取值皆為boolean屬性:true、false。
b. 相對(duì)于給定控件
XML屬性 說明
layout_above 使當(dāng)前控件位于給出id控件的上方
layout_below 使當(dāng)前控件位于給出id控件的下方
layout_toLeftOf 使當(dāng)前控件位于給出id控件的左側(cè)
layout_toRightOf 使當(dāng)前控件位于給出id控件的右側(cè)
layout_alignBottom 使當(dāng)前控件與給出id控件的底部部重合
layout_alignLeft 使當(dāng)前控件與給出id控件的左邊重合
layout_alignRight 使當(dāng)前控件與給出id控件的右邊重合
layout_alignTop 使當(dāng)前控件與給出id控件的頂部重合
layout_alignBaseline 使當(dāng)前控件的BaseLine與給出id控件t的BaseLine重合
上述所有屬性的取值皆為給定控件的id名,如下例子
//文本控件@+id/tab_textview在控件@+id/tab_imageview的下方
android:id="@+id/tab_textview"
android:layout_below="@+id/tab_imageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
3. 選擇器selector.xml的屬性
3.1 作用
通過設(shè)置selector.xml可使得控件在不同操作下(默認(rèn)、點(diǎn)擊、焦點(diǎn)等)的顯示不同樣式
3.2 屬性
XML屬性 說明
android:drawable 放一個(gè)drawable資源
android:state_pressed 按下狀態(tài),如一個(gè)按鈕觸摸或者點(diǎn)擊。
android:state_focused 取得焦點(diǎn)狀態(tài),比如用戶選擇了一個(gè)文本框。
android:state_hovered 光標(biāo)懸停狀態(tài),通常與focused state相同,它是4.0的新特性
android:state_selected 選中狀態(tài)
android:state_enabled 能夠接受觸摸或者點(diǎn)擊事件
android:state_checked 被checked了,如:一個(gè)RadioButton可以被check了。
android:state_enabled 能夠接受觸摸或者點(diǎn)擊事件
上述所有屬性的取值皆為boolean屬性:true、false。
3.3 實(shí)例說明
在drawable添加selector.xml資源文件。
button_selector.xml:
< selector xmlns:android="http://schemas.android.com/apk/res/android">
< !-- 指定按鈕按下時(shí)的圖片 -->
android:drawable="@drawable/start_down"
/>
< !-- 指定按鈕松開時(shí)的圖片 -->
android:drawable="@drawable/start"
/>
< /selector>
在布局文件main.xml中控件的屬性設(shè)置:
android:id="@+id/startButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/button_selector"
/>
4. 布局形狀shape.xml的屬性
//默認(rèn)顏色
//哪個(gè)方向有邊框線
?
android:bottom="0dp"
android:left="1dp"
android:right="1dp"
android:top="1dp" />
//邊框線顏色、大小
? ?
android:width="1dp"
android:color="#000000" />
在布局文件main.xml中控件的屬性設(shè)置:
android:id="@+id/startButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/layout_shape"
/>
三、總結(jié)
本文對(duì)Android五大布局介紹&屬性設(shè)置進(jìn)行了全面的介紹。接下來我會(huì)介紹繼續(xù)介紹Android開發(fā)中的相關(guān)知識(shí),有興趣可以繼續(xù)關(guān)注Carson_Ho的安卓開發(fā)筆記
請(qǐng)點(diǎn)贊!因?yàn)槟愕墓膭?lì)是我寫作的最大動(dòng)力!
相關(guān)文章閱讀
Android開發(fā):底部Tab菜單欄實(shí)現(xiàn)(FragmentTabHost+ViewPager)
Android開發(fā):Handler異步通信機(jī)制全面解析(包含Looper、Message Queue)
Android開發(fā):最全面、最易懂的Android屏幕適配解決方案
Android開發(fā):5分鐘解析Activity&Fragment生命周期
Android開發(fā):JSON簡介及最全面解析方法!
Android開發(fā):XML簡介及DOM、SAX、PULL解析對(duì)比
歡迎關(guān)注Carson_Ho的簡書!
不定期分享關(guān)于安卓開發(fā)的干貨,追求短、平、快,但卻不缺深度。
?
?