1. 程式人生 > 實用技巧 >Android常見介面佈局

Android常見介面佈局

Android常見介面佈局

2.1 View檢視

Android所有的UI元素都是通過View與ViewGroup構建的,ViewGroup作為容器承裝介面中的控制元件,他可以包含普通的View控制元件,也可以包含ViewGroup。如下圖是介面中ViewGroup佈局和控制元件的包含關係。
在這裡插入圖片描述
TIP:Android應用的每個介面的根元素必須有且只有一個ViewGroup容器。

2.2 介面佈局編寫方式

2.2.1 在XML中編寫佈局

Android可以使用XML佈局檔案控制介面佈局,從而有效地將介面中佈局的程式碼和Java程式碼隔離,使程式結構更加清晰。因此多數Android程式採用這種方式編寫佈局。

2.2.2 在Java程式碼中編寫佈局

Android程式的佈局不僅可以在XML佈局檔案中編寫,還可以在Java程式碼中編寫。在Android中所有佈局和控制元件的物件都可以通過new關鍵字創建出來,將建立的View控制元件新增到ViewGroup佈局中,從而實現View控制元件在佈局中顯示。

TIP:不管使用哪種方編寫佈局,他們控制Android使用者介面的本質是完全一致的,大多數時候,控制UI元素的XML屬性都有對應的方法。

2.3 常見介面佈局

Android系統提供了五種常見佈局,分別是RelativeLayout(相對佈局),LinearLayout(線性佈局),FrameLayout(幀佈局),TableLayout(表格佈局),ConstraintLayout(約束佈局)。

2.3.1 佈局的通用屬性

Android系統提供的五種常見佈局直接或間接繼承自ViewGroup,因此常見的佈局也支援在ViewGroup中定義的屬性,這些屬性可以看作佈局的通用屬性。如下圖:
在這裡插入圖片描述

2.3.2 RelativeLayout相對佈局

RelativeLayout(相對佈局)通過相對定位的方式指定子控制元件的位置,在XML佈局檔案中定義相對佈局時使用標籤,定義格式如下圖:
在這裡插入圖片描述
RelativeLayout通過以父容器或其他子控制元件為參照物,指定佈局中子控制元件的位置。在RelativeLayout的子控制元件具備一些屬性,用於指定子控制元件的位置,控制元件屬性如下圖:
在這裡插入圖片描述
在這裡插入圖片描述

2.3.3 LinearLayout線性佈局

LinearLayout(線性佈局)通常指定佈局內的子控制元件水平或者豎直排列。在XML佈局檔案中定義線性佈局的基本語法格式如下:
在這裡插入圖片描述
除了佈局的通用屬性外,LinearLayout佈局還有兩個比較常見的屬性,具體如下表:
在這裡插入圖片描述
1.屬性說明
android:orientation屬性,用於設定LinearLayout佈局中控制元件的排列順序,其可選值為vertical和horizontal。其中:
vertical:表示LinearLayout佈局內控制元件依次從上到下豎直排列。
horizontal:表示LinearLayout佈局內控制元件依次從左到下右水平排列。
2.android:layout_weight屬性:該屬性別稱為權重,通過設定該屬性值可使佈局內的控制元件按照權重比顯示大小,在進行螢幕適配時起到關鍵作用。

2.3.4 TableLayout表格佈局

TableLayout(表格佈局)採用行,列的形式來管理控制元件,它不需要明確宣告包含多少行,多少列,而是通過在TableLayout佈局中新增TableRow佈局或控制元件來控制表格的行數,可以在TableRow佈局中新增控制元件來控制表格的列數。在XML中定義表格佈局的基本語法格式如下:
在這裡插入圖片描述在這裡插入圖片描述
TableLayout繼承自LinearLayout,因此它完全支援LinearLayout所支援的屬性,此外,它還有其他常見屬性。如下圖:
在這裡插入圖片描述
TableLayout佈局中的控制元件有兩個常見屬性android:layout_column與android:layout_span,分別用於設定控制元件顯示的位置,佔據的行數,如表所示:
在這裡插入圖片描述
TIP:在TableLayout佈局中,列的寬度由該列中最寬的那個單元格(控制元件)決定,整個表格佈局的寬度取決於父容器的寬度。

2.3.5 FrameLayout幀佈局

FrameLayout(幀佈局)用於在螢幕上建立一塊空白區域,新增到該區域中的每個子控制元件佔一幀,這些幀會一個一個疊加在一起,後加入的控制元件會疊加在上一個控制元件上層。預設情況下,幀佈局中所有的控制元件會與左上角對齊。在XML佈局檔案中定義FrameLayout的基本語法格式如下:在這裡插入圖片描述
幀佈局除了2.3.3小節介紹的通用屬性外,還有兩個特殊屬性,如下表:
在這裡插入圖片描述

2.3.6 ConstrainLayout約束佈局

ConstrainLayout是Android Studio 2.2新增加的佈局。與前面介紹的介面佈局相比,ConstrainLayout並不太適合使用XML程式碼的方式編寫佈局,但是他非常適合使用視覺化的方式編寫介面佈局。相對於傳統佈局,ConstrainLayout在以下幾個方面提供了一些新的特性:
1.相對定位
相對定位是在ConstrainLayout中建立佈局的基本構建方法之一。相對定位即一個控制元件相對於另一個控制元件進行定位,ConstrainLayout佈局中的控制元件可以在橫向和縱向上新增約束關係的方式進行相對定位。
2.居中定位和傾向
在ConstrainLayout佈局中,不僅兩個控制元件之間可以通過新增約束的方式確定控制元件的相對定位,控制元件也可以通過新增約束的方式確定連控制元件在父控制元件中的相對位置。當相同方向上,控制元件兩邊同時向ConstrainLayout新增約束,則控制元件在新增約束方向上居中顯示。
在約束是同向相反的情況下,預設控制元件是居中的,但是也像拔河一樣,兩個約束的力大小不同時,就會產生傾向,設定傾向的屬性如下表:在這裡插入圖片描述
TIP:如果ConstrainLayout佈局中的控制元件在居中方向上和父佈局尺寸一致,此時該方向的居中約束和傾向沒有意義。
3.Chain
Chain(鏈)是一種特殊的約束,它使我們能夠對一組水平或者豎直方向互相關聯的控制元件進行統一管理。一組控制元件通過一個雙向的約束關係連結起來,就能形成一個Chain。