標籤:
Android介面編程
2.3.1 布局介紹
布局用於定義Activity中UI元素的排列結構,Android提供了LinearLayout線性布局、RelativeLayout相對布局 、FrameLayout幀布局 、TableLayout表格布局、AbsoluteLayout座標布局 共五種布局,可以通過兩種方式聲明布局:
? 在 XML 中聲明 UI 元素。Android 提供了對應於 View 類及其子類的XML 元素
? 運行時執行個體化布局元素。可以通過編程建立 View 對象和 ViewGroup 對象(並操縱其屬性)。
在 XML 中聲明 UI 的優點在於,可以更好地將應用的外觀與控制應用行為的代碼隔離。UI 描述位於應用代碼外部,這意味著在修改或調整描述時無需修改您的原始碼並重新編譯。例如,可以建立適用於不同螢幕方向、不同裝置螢幕尺寸和不同語言的 XML 布局。此外,在 XML 中聲明布局還能更輕鬆地顯示 UI 的結構,從而簡化問題調試過程。因此,Android應用中普遍採用在XML中布局UI元素
2.3.2布局的實現
編寫布局檔案
布局檔案都必須只包含一個根項目,並且該元素必須是視圖對象或 ViewGroup 對象。定義根項目之後,即可再以子項目的形式添加其他布局對象或UI元素,從而逐步構建定義布局的視圖階層
在 XML 中聲明布局後,請在您的 Android 項目 res/layout/ 目錄中以 .xml 副檔名儲存檔案,以便其能夠正確編譯。
載入布局檔案
當編譯應用時,每個 XML 布局檔案都會編譯到一個 View 資源中。應該在 Activity.onCreate() 回調方法中使用應用代碼載入布局資源。通過調用 setContentView(),以 R.layout.layout_file_name 形式向其傳遞對布局資源的引用來執行此操作。
2.3.3線型布局
所有的子項目都按照垂直或水平的順序在介面上排列,如果垂直排列,則每行僅包含一個介面元素,
如果水平排列,則每列僅包含一個介面元素
線型布局的常用屬性
表2.3-1線性布局常用屬性
XML屬性 |
值 |
備忘 |
android:orientation |
horizontal vertical |
決定橫向排列,還是縱向排列 |
android:layout_weight |
int |
將父布局中剩餘的尺寸按各兄弟元素的weight值比例進行分配,與“wrap_content”配合使用 |
android:layout_margin |
dp |
設定對象邊緣與父布局的邊緣之間的空白 |
android:padding |
dp |
設定自身內部元素距離自身邊緣的距離 |
android:background |
color/drawable |
設定整個布局畫面的背景 |
android:gravity |
Top,bottom,left,right,center |
元素在自身所屬地區內的對齊 |
android:layout_gravity |
Top,bottom,left,right,center |
元素在布局中的對齊 |
下面通過執行個體講解Linearlayout的用法
2.3.2 FrameLayout布局
最簡單的布局形式 ,組件都放在螢幕的左上方,組件是按次序加入次序層疊在一起,上一層的控制項會覆蓋下一層的控制項
表2.3-2FrameLayout的常用屬性
XML屬性 |
值 |
備忘 |
android:layout_margin |
dp |
設定對象邊緣與父布局的邊緣之間的空白 |
android:padding |
dp |
設定自身內部元素距離自身邊緣的距離 |
android:background |
color/drawable |
設定整個布局畫面的背景 |
android:gravity |
Top,bottom,left,right,center |
元素在自身所屬地區內的對齊 |
android:layout_gravity |
Top,bottom,left,right,center |
元素在布局中的對齊 |
下面通過執行個體講解FrameLayout的用法
執行個體3-2:設計3-5所示介面
圖3-5
2.3.3相對布局RelativeLayout
一種非常靈活的布局方式,通過指定介面元素與其他元素的相對位置關係,確定介面中所有元素的布局位置。特點:能夠最大程度保證在各種螢幕類型的手機上正確顯示介面布局表
相對布局屬性比較多,為了便於理解和記憶通常我們把屬性分為三類:
第一類:屬性值為true或false,如表2.3-3所示
表2.3-3RelativeLayout的常用屬性
XML屬性 |
備忘 |
android:layout_centerHrizontal |
水平置中 |
android:layout_centerVertical |
垂直置中 |
android:layout_centerInparent |
相對於父元素完全置中 |
android:layout_alignParentBottom |
貼緊父元素的下邊緣 |
android:layout_alignParentLeft |
貼緊父元素的左邊緣 |
android:layout_alignParentRight |
貼緊父元素的右邊緣 |
android:layout_alignParentTop |
貼緊父元素的上邊緣 |
第二類:屬性值必須為id的引用名“@id/id-name”,如表2.3-4所示
表2.3-4RelativeLayout的常用屬性
XML屬性 |
備忘 |
android:layout_below |
在某元素的下方 |
android:layout_above |
在某元素的的上方 |
android:layout_toLeftOf |
在某元素的左邊 |
android:layout_toRightOf |
在某元素的右邊 |
android:layout_alignTop |
本元素的上邊緣和某元素的的上邊緣對齊 |
android:layout_alignLeft |
本元素的左邊緣和某元素的的左邊緣對齊 |
android:layout_alignBottom |
本元素的下邊緣和某元素的的下邊緣對齊 |
第三類:屬性值為具體的像素值,主要是調整ui元素之間的間距,如表2.3-5所示
表2.3-5RelativeLayout的常用屬性
XML屬性 |
備忘 |
android:layout_marginBottom |
離某元素底邊緣的距離 |
android:layout_marginLeft |
離某元素左邊緣的距離 |
android:layout_marginRight |
離某元素右邊緣的距離 |
android:layout_marginTop |
離某元素上邊緣的距離 |
android:layout_marginBottom |
離某元素底邊緣的距離 |
android:layout_marginLeft |
離某元素左邊緣的距離 |
android:layout_marginRight |
離某元素右邊緣的距離 |
下面通過執行個體講解RelativeLayout的布局設計
2.3.4表格布局TableLayout
Tablelayout以行和列的形式對控制項進行管理,每一行為一個TableRow對象,或一個View控制項。當為TableRow對象時,可在TableRow下添加子控制項,預設情況下,每個子控制項佔據一列。有多少個子控制項就有多少列;當為View時,該View將獨佔一行,2.3.7所示
圖2.3-7
表2.3-6TableLayout的常用屬性
XML屬性 |
備忘 |
android:layout_colum |
指定該單元格在第幾列顯示 |
android:layout_span |
指定該單元格佔據的列數(未指定時,為1) |
android:stretchColumns |
設定可伸展的列。該列可向行方向伸展,最多可佔據一整行 |
android:shrinkColumns |
設定可收縮的列。當該列子控制項的內容太多,已經擠滿所在行,那麼該子控制項的內容將往列方向顯示 |
android:layout_colum |
指定該單元格在第幾列顯示 |
android:layout_span |
指定該單元格佔據的列數(未指定時,為1) |
android:stretchColumns |
設定可伸展的列。該列可向行方向伸展,最多可佔據一整行 |
下面通過執行個體講解TableLayout的布局設計
2.3.5絕對布局AbsoluteLayout
AbsoluteLayout是根據元素指定的x/y座標值在螢幕上進行顯示的布局。容器的座標系是以左上方為(0, 0)點,當垂直向下為y軸和水平向右為x軸。AbsoluteLayout 沒有頁邊框,允許元素之間互相重疊。
因為需要為元素固定座標點,使介面代碼太過剛性,以導致在不同的裝置上相容性差,開發中我們通常不推薦使用 AbsoluteLayout ,因此在這裡我們只需簡單的瞭解一下即可。
衝天之峰 20160706
Android介面編程——Android布局組件(二)