Android復(fù)習(xí)之旅--常用布局

作為菜鳥,以下只是總結(jié)了一些布局中的屬性和一些不成熟的見解,并沒有對(duì)各種布局進(jìn)行更高級(jí)更詳細(xì)的分析,而且我也不會(huì)。后面倒有一個(gè)大神stormzhang對(duì)Android布局方式優(yōu)化的博文,大家可以去看看。

對(duì)于Android的布局方式,其實(shí)常用到的布局也就三種(LinearLayout、RelativeLayout、FrameLayout)。

屬性有無Layout前綴的區(qū)別

  • 有Layout:表示在父控件中的 ...
  • 無Layout:表示在控件內(nèi)部的 ...
LinearLayout(線性布局)

布局層次如果和使用RelativLayout的層次一樣,建議使用LinearLayout,因?yàn)長inearLayout的性能要好一些

常用屬性:

orientation:布局中組件的排列方式,有horizontal(水平)、vertical(豎直,默認(rèn))兩種方式
gravity:控制組件所包含的子元素的對(duì)齊方式,可多個(gè)組合,如(left|bottom)
layout_gravity:控制該組件在父容器里的對(duì)齊方式
background:為給組件設(shè)置一個(gè)背景顏色或背景圖片

** layout_weight(權(quán)重):用來等比例劃分區(qū)域 **

首先分配好控件聲明的尺寸,然后再將剩下的尺寸按weight進(jìn)行分配
比例:控件尺寸 + 父控件剩余尺寸 * 權(quán)重值/布局中的權(quán)重值之和

(分割線):

divider:為LinerLayout設(shè)置分割線的圖片
showDividers:設(shè)置分割線的位置,有四個(gè)可選值(none,middle,begining,end)
dividerPadding:設(shè)置分割線的padding
RelativeLayout(相對(duì)布局)

對(duì)于一些復(fù)雜的布局方式,使用相對(duì)布局是最容易實(shí)現(xiàn)的

常用屬性:

gravity:設(shè)置容器內(nèi)組件的對(duì)齊方式
ignoreGravity:設(shè)置該屬性為true的組件,將不受gravity屬性的影響

** 相對(duì)布局里的控件定位屬性:**
根據(jù)父容器定位:

layout_alignParentLeft:左對(duì)齊(true|false)
layout_alignParentRight:右對(duì)齊(true|false)
layout_alignParentTop:頂部對(duì)齊(true|false)
layout_alignParentBottom:底部對(duì)齊(true|false)
layout_centerHorizontal:水平居中(true|false)
layout_centerVertical:垂直居中(true|false)
layout_centerInParent:中間位置(true|false)

根據(jù)兄弟組件定位:

layout_toLeftOf:參考組件的左邊( @id/..)
layout_toRightOf:參考組件的右邊(@id/..)
layout_above:參考組件的上方(@id/..)
layout_below:參考組件的下方(@id/..)
layout_alignTop:對(duì)齊參考組件的上邊界(@id/..)
layout_alignBottom:對(duì)齊參考組件的下邊界(@id/..)
layout_alignLeft:對(duì)齊參考組件的左邊界(@id/..)
layout_alignRight:對(duì)齊參考組件的右邊界(@id/..)
FrameLayout(幀布局):

可以動(dòng)態(tài)地為幀布局添加View或者一個(gè)布局文件。幀布局的子控件式以棧的形式進(jìn)行存放的,最后添加到布局中的子控件在棧的頂部,可以實(shí)現(xiàn)刮刮樂等的效果

常用屬性:

foreground:設(shè)置該幀布局容器的前景圖像
foregroundGravity:設(shè)置前景圖像顯示的位置(* 前景圖像永遠(yuǎn)處于幀布局的最上面,直接面對(duì)用戶的圖像,就是不會(huì)被覆蓋的圖片* )
GridLayout(網(wǎng)格布局)

可以實(shí)現(xiàn)控件的交錯(cuò)顯示,例如計(jì)算器等

常用屬性:

orientation(排列方式):vertical(豎直,默認(rèn))、horizontal(水平)
rowCount:設(shè)置網(wǎng)格的行數(shù)
columnCount:設(shè)置網(wǎng)格的列數(shù)
layout_row:設(shè)置組件位于第幾行(以0開始計(jì)算)
layout_column:設(shè)置組件位于第幾列(以0開始計(jì)算)
layou_rowSpan:橫跨多少行(合并行)
layout_column:橫跨多少列(合并列)

** TableLayout(表格布局) **

較少使用

常用屬性:

collapseColumns:設(shè)置需要隱藏的列的序號(hào)
shrinkColumns:設(shè)置允許被收縮的列的列序號(hào)
stretchColumns:設(shè)置允許被拉伸的列的列序號(hào)
layout_span="2":合并兩個(gè)單元格

**AbsoluteLayout(絕對(duì)布局) **

一般不會(huì)使用它來布局,知道就可以了

常用屬性:

layout_x:設(shè)置組件的X坐標(biāo)
layout_y:設(shè)置組件的y坐標(biāo)

** 布局優(yōu)化 **
盡量多使用RelativeLayout和LinearLayout, 不要使用絕對(duì)布局AbsoluteLayout,在布局層次一樣的情況下, 建議使用LinearLayout代替RelativeLayout, 因?yàn)長inearLayout性能要稍高一點(diǎn),但往往RelativeLayout可以簡(jiǎn)單實(shí)現(xiàn)LinearLayout嵌套才能實(shí)現(xiàn)的布局。

  • 將可復(fù)用的組件抽取出來并通過include標(biāo)簽使用;
  • 使用ViewStub標(biāo)簽來加載一些不常用的布局;
  • 使用merge標(biāo)簽減少布局的嵌套層次;

詳情請(qǐng)參考stormzhang的博文,里面已經(jīng)說的很詳細(xì)了而且也很容易理解
Android布局優(yōu)化

最后編輯于
?著作權(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),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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