官术网_书友最值得收藏!

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 在框架布局中添加第二個子視圖

主站蜘蛛池模板: 琼海市| 盱眙县| 鹰潭市| 咸宁市| 安图县| 阿城市| 昌黎县| 瑞昌市| 商丘市| 商都县| 涿州市| 綦江县| 扶风县| 宜良县| 西林县| 兴山县| 外汇| 景泰县| 朝阳区| 安多县| 阜阳市| 邢台县| 清远市| 太白县| 正蓝旗| 内乡县| 开阳县| 榆社县| 阳东县| 年辖:市辖区| 平顶山市| 环江| 铁力市| 吉木萨尔县| 松溪县| 阳江市| 仁化县| 虞城县| 舞钢市| 柘荣县| 金山区|