Android UI之五種基本布局詳解

Android布局是應(yīng)用界面開發(fā)的重要一環(huán)及汉,在Android中沮趣,共有五種布局方式,分別是:

  1. LinearLayout (線性布局)
  2. RelativeLayout(相對布局)
  3. FrameLayout(幀布局)
  4. TableLayout(表格布局)GridLayout 網(wǎng)格布局
  5. 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è)置的屬性包括全局屬性及單元格屬性粪小。

  1. 全局屬性也即列屬性大磺,有以下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)

  1. 單元格屬性工腋,有以下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的布局策略簡單分為以下三個部分:

  1. 首先它與LinearLayout布局一樣俩莽,也分為水平和垂直兩種方式旺坠,默認是水平布局,一個控件挨著一個控件從左到右依次排列扮超,但是通過指定Android:columnCount設(shè)置列數(shù)的屬性后取刃,控件會自動換行進行排列。另一方面出刷,對于GridLayout布局中的子控件蝉衣,默認按照wrap_content的方式設(shè)置其顯示,這只需要在GridLayout布局中顯式聲明即可巷蚪。
  2. 其次病毡,若要指定某控件顯示在固定的行或列,只需設(shè)置該子控件的android:layout_row和android:layout_column屬性即可屁柏,但是需要注意:android:layout_row=”0”表示從第一行開始啦膜,android:layout_column=”0”表示從第一列開始有送,這與編程語言中一維數(shù)組的賦值情況類似。
  3. 最后僧家,如果需要設(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(絕對布局)

絕對布局極少使用肌稻,在不是絕對要使用的情況下就絕對不要用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末清蚀,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子爹谭,更是在濱河造成了極大的恐慌枷邪,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诺凡,死亡現(xiàn)場離奇詭異东揣,居然都是意外死亡,警方通過查閱死者的電腦和手機腹泌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門嘶卧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人凉袱,你說我怎么就攤上這事芥吟。” “怎么了绑蔫?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵运沦,是天一觀的道長。 經(jīng)常有香客問我配深,道長携添,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任篓叶,我火速辦了婚禮烈掠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缸托。我一直安慰自己左敌,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布俐镐。 她就那樣靜靜地躺著矫限,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上叼风,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天取董,我揣著相機與錄音,去河邊找鬼无宿。 笑死茵汰,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的孽鸡。 我是一名探鬼主播蹂午,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼彬碱!你這毒婦竟也來了豆胸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤堡妒,失蹤者是張志新(化名)和其女友劉穎配乱,沒想到半個月后溉卓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體皮迟,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年桑寨,在試婚紗的時候發(fā)現(xiàn)自己被綠了伏尼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡尉尾,死狀恐怖爆阶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情沙咏,我是刑警寧澤辨图,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站肢藐,受9級特大地震影響故河,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吆豹,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一鱼的、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧痘煤,春花似錦凑阶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春师郑,著一層夾襖步出監(jiān)牢的瞬間哼勇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工呕乎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留积担,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓猬仁,卻偏偏與公主長得像帝璧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子湿刽,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容