安卓布局,

前言

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

目錄

圖片發(fā)自簡書App

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ā)的干貨,追求短、平、快,但卻不缺深度。

?

?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容