Android UI之五種基本布局詳解

Android布局是應用界面開發的重要一環,在Android中,共有五種布局方式,分別是:

  1. LinearLayout (線性布局)
  2. RelativeLayout(相對布局)
  3. FrameLayout(幀布局)
  4. TableLayout(表格布局)GridLayout 網格布局
  5. AbsoluteLayout(絕對布局)

LinearLayout (線性布局)

LinearLayout是一種線型的布局方式。LinearLayout布局容器內的組件一個挨著一個地排列起來:不僅可以控制個組件橫向排列,也可控制各組件縱向排列。

  • android:orientation 屬性指定了排列方向是 vertical,如果指定的是horizontal,控件就會在水平方向上排列了。
  • android:gravity 是用 于指定文字在控件中的對齊方式
  • android:layout_gravity 是用于指定控件在布局中的對齊 方式 RelativeLayout 相對布局
  • android:layout_weight="1"(權重分布),這個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 --- 為控件指定相應的ID
  android:text --- 指定控件當中顯示的文字,需要注意的是,這里盡量使用strings.xml文件當中的字符串
  android:grivity --- 指定控件的基本位置,比如說居中,居右等位置這里指的是控件中的文本位置并不是控件本身。
  android:textSize --- 指定控件當中字體的大小
  android:background --- 指定該控件所使用的背景色,RGB命名法
  android:width --- 指定控件的寬度
  android:height --- 指定控件的高度
  android:padding* --- 指定控件的內邊距,也就是說控件當中的內容
  android:sigleLine --- 如果設置為真的話,則控件的內容在同一行中進行顯示

FrameLayout(幀布局)

FrameLayout對象好比一塊在屏幕上提前預定好的空白區域,可以將一些元素填充在里面,如圖片。所有元素都被放置在FrameLayout區域的最左上區域,而且無法為這些元素制指定一個確切的位置,若有多個元素,那么后面的元素會重疊顯示在前一個元素上。

TableLayout(表格布局)

TableLayout是指將子元素的位置分配到行或列中。Android的一個TableLayout有許多TableRow組成,每一個TableRow都會定義一個Row。TableLayout容器不會顯示Row,Column,及Cell的邊框線,每個Row擁有0個或多個Cell,每個Cell擁有一個View對象。在使用tablelayout時,應注意每一個cell的寬度。

(1)TableLayout行列數的確定

  • TableLayout的行數由開發人員直接指定,即有多少個TableRow對象(或View控件),就有多少行
  • TableLayout的列數等于含有最多子控件的TableRow的列數。如第一TableRow含2個子控件,第二個TableRow含3個,第三個TableRow含4個,那么該TableLayout的列數為4.

(2)TableLayout可設置的屬性詳解

TableLayout可設置的屬性包括全局屬性及單元格屬性。

  1. 全局屬性也即列屬性,有以下3個參數:
      android:stretchColumns 設置可伸展的列。該列可以向行方向伸展,最多可占據一整行。
      android:shrinkColumns 設置可收縮的列。當該列子控件的內容太多,已經擠滿所在行,那么該子控件的內容將往列方向顯示。
      android:collapseColumns 設置要隱藏的列。
    示例:
      android:stretchColumns="0" 第0列可伸展
      android:shrinkColumns="1,2" 第1,2列皆可收縮
      android:collapseColumns="*" 隱藏所有行

說明:列可以同時具備stretchColumns及shrinkColumns屬性,若此,那么當該列的內容N多時,將“多行”顯示其內容。(這里不是真正的多行,而是系統根據需要自動調節該行的layout_height)

  1. 單元格屬性,有以下2個參數:
      android:layout_column 指定該單元格在第幾列顯示
      android:layout_span 指定該單元格占據的列數(未指定時,為1)
      示例:
      android:layout_column="1" 該控件顯示在第1列
      android:layout_span="2" 該控件占據2列

說明:一個控件也可以同時具備這兩個特性。

GridLayout 網格布局

GridLayout布局使用虛細線將布局劃分為行、列和單元格,也支持一個控件在行、列上都有交錯排列。而GridLayout使用的其實是跟LinearLayout類似的API,只不過是修改了一下相關的標簽而已,所以對于開發者來說,掌握GridLayout還是很容易的事情。GridLayout的布局策略簡單分為以下三個部分:

  1. 首先它與LinearLayout布局一樣,也分為水平和垂直兩種方式,默認是水平布局,一個控件挨著一個控件從左到右依次排列,但是通過指定Android:columnCount設置列數的屬性后,控件會自動換行進行排列。另一方面,對于GridLayout布局中的子控件,默認按照wrap_content的方式設置其顯示,這只需要在GridLayout布局中顯式聲明即可。
  2. 其次,若要指定某控件顯示在固定的行或列,只需設置該子控件的android:layout_row和android:layout_column屬性即可,但是需要注意:android:layout_row=”0”表示從第一行開始,android:layout_column=”0”表示從第一列開始,這與編程語言中一維數組的賦值情況類似。
  3. 最后,如果需要設置某控件跨越多行或多列,只需將該子控件的android:layout_rowSpan或者layout_columnSpan屬性設置為數值,再設置其layout_gravity屬性為fill即可,前一個設置表明該控件跨越的行數或列數,后一個設置表明該控件填滿所跨越的整行或整列。
    AbsoluteLayout
    android:layout_x 指定控件在父布局的x軸坐標
    android:layout_y 指定控件在父布局的 y軸坐標

AbsoluteLayout(絕對布局)

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內容