- Android Studio開發實戰:從零基礎到App上線(第2版)
- 歐陽燊
- 1062字
- 2019-12-06 12:07:19
3.1 其他布局
本節介紹Android另外兩個常用的布局視圖,分別是相對布局RelativeLayout的屬性說明與注意點、框架布局FrameLayout的屬性說明與注意點。
3.1.1 相對布局RelativeLayout
RelativeLayout下級視圖的位置是相對位置,得有具體的參照物才能確定最終位置。如果不設定下級視圖的參照物,那么下級視圖默認顯示在RelativeLayout內部的左上角。用于確定視圖位置的參照物分兩種,一種是與該視圖自身平級的視圖,另一種是該視圖的上級視圖(RelativeLayout)。與參照物對比,相對位置的屬性與類型值見表3-1。
表3-1 相對位置的屬性與類型的取值說明

為了更好地理解上述相對屬性的含義,接下來使用RelativeLayout及其下級視圖進行布局,看看實際效果圖是怎樣的。下面是演示相對布局的XML代碼:



圖3-1 在布局文件中定義的相對布局
上述布局文件的效果如圖3-1所示,RelativeLayout的下級視圖為各個按鈕控件,按鈕上的文字說明了所處的相對位置,具體的控件顯示方位正如XML屬性中描述的那樣。
一般開發者在布局文件中就定義好了視圖的相對位置,很少會等到在代碼中定義。不過也有特殊情況,如果視圖是在代碼中動態添加的,那么相對位置也只能在代碼中臨時定義。代碼中定義相對位置用到的是RelativeLayout.LayoutParams的addRule方法,該方法的第一個參數表示相對位置的類型,具體取值說明見表3-1;第二個參數表示參照物視圖的ID,即當前視圖要參照哪個視圖確定自身位置。
下面是在代碼中給RelativeLayout動態添加子視圖并指定子視圖相對位置的代碼片段:

動態添加子控件的效果如圖3-2所示,在圖上給每個方塊子視圖做了編號,以此區分該方塊是由哪個按鈕添加的以及添加的相對位置。

圖3-2 在代碼中動態添加下級視圖的相對布局
3.1.2 框架布局FrameLayout
FrameLayout也是較常用的布局,其下級視圖無法指定所處的位置,只能統統從上級FrameLayout的左上角開始添加,并且后面添加的子視圖會把之前的子視圖覆蓋掉??蚣懿季忠话阌糜谛枰丿B顯示的場合,比如繪圖、游戲界面等,常見屬性說明如下。
- foreground:指定框架布局的前景圖像。該圖像在框架內部永遠處于最頂層,不會被框架內的其他視圖覆蓋。
- foregroundGravity:指定前景圖像的對齊方式。該屬性的取值說明同gravity。
為了更直觀地理解FrameLayout,可在代碼中為框架布局動態添加子視圖,然后觀察前后兩個子視圖的顯示效果。
先給框架布局添加一個暗灰色的子視圖,如圖3-3所示。再給框架布局添加一個鮮紅色子視圖,如圖3-4所示。此時后面添加的視圖會覆蓋前面添加的視圖。注意,框架視圖上方正中間的小圖標一直都沒被覆蓋,是它被指定為前景圖像的緣故。
除了線性布局、相對布局、框架布局外,Android還提供了其他幾個布局視圖,如絕對布局AbsoluteLayout、表格布局TableLayout等,不過這幾個布局在實際開發中用得并不多,讀者只需掌握前3種布局就可以了。

圖3-3 在框架布局中添加第一個子視圖

圖3-4 在框架布局中添加第二個子視圖