1. 程式人生 > >Android常用佈局類整理(一)

Android常用佈局類整理(一)

Android常用佈局類整理

 最近又回頭做了一下android的專案,發覺越來越不從心,很多東西都忘了,簡單的頁面佈局也很多寫不出來,首先還是先整理一下一些會混淆的概念先

layout_width/layout_height的兩種不同的方式

① wrap_content能包裹其中的內容即可

 

② fill_parent/match_parent 填滿父檢視的空間

 

FrameLayout

       最簡單的佈局管理器,把每一個子檢視放置在邊框內,預設左上角,使用gravity屬性來改變其位置,新增多個子檢視時,會堆積在前一個子檢視上面,並遮擋住上一個子檢視

LinearLayout

       按垂直(vertical)或水平(horizontal)對齊每一個子檢視,它包含的子控制元件將以橫向或豎向的方式排列,垂直方向的佈局是N行單列的結構,水平方向的佈局是單行N列的結構,允許為每一個子檢視制定一個weight屬性,以控制在可用空間內的相對大小

 

android:layout_weight="1"

通過設定控制元件的layout_weight屬性以控制各個控制元件在佈局中的相對大小,描述該元素在剩餘空間中佔有的大小比例。

線性佈局會根據該控制元件layout_weight值與其所處佈局中所有控制元件layout_weight值之和的比值為該控制元件分配佔用的區域。

例子:在水平佈局的LinearLayout中有兩個Button,這兩個Button的layout_weight屬性值都為1,那麼這兩個按鈕都會被拉伸到整個螢幕寬度的一半。如果layout_weight指為0,控制元件會按原大小顯示,不會被拉伸(預設就是0);對於其餘layout_weight屬性值大於0的控制元件,系統將會減去layout_weight屬性值為0的控制元件的寬度或者高度,再用剩餘的寬度或高度按相應的比例來分配每一個控制元件顯示的寬度或高度。

==========以下是button的layout_width屬性設為wrap_content的時候的情況,意味著控制元件要優先儘可能的小=====================

①三個button的weight都不設定,預設為0,每個button佔用自己本身的空間


②三個button的weight都設定為1 android:layout_weight="1",每個button都佔用1/3

③三個button的weight分別設定為0,1,2,test佔用自己原來大小,test2佔用剩餘空間的1/3,test3佔用剩餘空間的2/3

==========以下是button的layout_width屬性設為fill_parent的時候的情況,意味著控制元件要優先儘可能的大

=====================

①三個button的weight都不設定,test1就已經把所有空間佔滿了


②三個button的weight都設為1,每個button的優先順序都一樣,平分介面空間


android:gravity與 android:layout_gravity的區別

android:layout_gravity是指定本元素相對它的父元素的對齊方式。比如一個button 在linearlayout裡,你想把該button放在linearlayout裡靠左、靠右等位置就可以通過該屬性設定。

 

android:gravity是指定本元素的子元素相對它的對齊方式。屬性是對該view中內容的限定.比如一個button 上面的text. 你可以設定該text 相對於view的靠左,靠右等位置。android:gravity="top"(buttom、left、right、center_vertical、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical、clip_horizontal)控制佈局中控制元件的對齊方式。如果是沒有子控制元件的控制元件設定此屬性,表示其內容的對齊方式,比如說TextView裡面文字的對齊方式;若是有子控制元件的控制元件設定此屬性,則表示其子控制元件的對齊方式,如果需要設定多個屬性值,用“|”進行組合

 

RelativeLayout

       定義每一個子檢視與其他檢視之間以及螢幕邊界之間的相對位置

第一類 : 屬性值為 true 或 false

android:layout_centerVertical 

垂直居中

android:layout_centerInparent

相對於父元素完全居中

android:layout_alignParentBottom

貼緊父元素的下邊緣

android:layout_alignParentLeft

貼緊父元素的左邊緣

android:layout_alignParentRight

貼緊父元素的右邊緣

android:layout_alignParentTop

貼緊父元素的上邊緣

android:layout_alignWithParentIfMissing      

若找不到兄弟元素以父元素做參照物         

第二類:屬性值必須為 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

本元素的右邊緣和某元素的的右邊緣對齊

第三類:屬性值為具體的畫素值,如 30dip , 40px

android:layout_marginBottom      

離某元素底邊緣的距離             

android:layout_marginLeft

離某元素左邊緣的距離

android:layout_marginRight

離某元素右邊緣的距離

android:layout_marginTop                              

離某元素上邊緣的距離                               

GridLayout

       網格佈局在 3.0(Level 11)後引入,是最為靈活的一種佈局管理器,使用一個隨意選擇的網格來放置檢視,用虛線將佈局劃分為行、列和單元格,也支援一個控制元件在行、列上都有交錯排列

首先預設是水平佈局,控制元件從左到右依次排列,但通過指定columnCount設定列數的屬性後,控制元件會自動換行進行排列,其次,如果要指定某控制元件固定在某行某列,設定該控制元件的layout_row和layout_column屬性,最後,如果需要設定某控制元件跨越多行或多列,設定該控制元件的layout_rowSpan或layout_columnSpan屬性為數值(表明該控制元件跨越的行數和列數),再設定layout_gravity屬性為fill即可(表明該控制元件填滿所跨越的整行或整列)

    ----> 效果圖