——不積跬步,無(wú)以至千里;不積小流,無(wú)以成江海
通常我們開(kāi)發(fā)的應用程序都是需要具有友好的用戶(hù)界面,那么Android中提供了哪些布局方式呢?當我們構思好了所需要的各種控件的時(shí)候,怎樣才能將它們放到Android設備屏幕上正確的位置呢?在Android中,Layout是負責管理控件在屏幕的位置的類(lèi),并且提供了幾個(gè)簡(jiǎn)單的布局模型,開(kāi)發(fā)人員通過(guò)將這幾種布局模型的組合可以構建出我們想要的復雜的用戶(hù)界面。本文中,將會(huì )對其一一做簡(jiǎn)單的介紹,筆者主要寫(xiě)了一個(gè)簡(jiǎn)單的程序,以一個(gè)ListView顯示五種布局,讀者可以點(diǎn)擊相應的布局選項查看布局效果。(注:由于內容比較多,加上筆者最近復習考試,所以?xún)热莶蝗?,后面慢慢補上)
(主界面程序列出五種基本的布局方式,選擇各種布局可以查看效果)
1、 線(xiàn)性布局
線(xiàn)性布局方式是我們應用程序中最常用的布局方式,主要提供控件水平或者垂直排列的模型,在主界面中點(diǎn)擊LinearLayout選項,將會(huì )進(jìn)入線(xiàn)性布局效果顯示界面,如下圖:
查看該布局界面文件,如下所示:
從上述我們可以看出,通過(guò)靈活的組合LinearLayout布局方式,可以很容易的設計出復雜的一些界面。如下圖所示:
2、 坐標布局
坐標布局對于有過(guò).Net Winform開(kāi)發(fā)經(jīng)驗的人員來(lái)說(shuō)應該比較熟悉了,即控件的在父容器上所處的位置主要是有其橫縱坐標決定的~在坐標布局中,坐標系如下所示:
對于該布局的示例效果,筆者主要是通過(guò)按左右鍵來(lái)控制小人左右移動(dòng)來(lái)講解的,如下圖:
界面布局內容如下:
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/AbsoluteLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView android:id="@+id/txtIntro"
android:text="按左右鍵控制小人運動(dòng)"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_x="20dip"
android:layout_y="20dip">
</TextView>
<ImageView android:id="@+id/imgMan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x="100dip"
android:layout_y="100dip">
</ImageView>
</AbsoluteLayout>
實(shí)現控制小人左右走動(dòng)的動(dòng)畫(huà)代碼在A(yíng)bsoluteLayoutActivity.java文件中,內容如下:
從這個(gè)例子可以看出,實(shí)現幀動(dòng)畫(huà)的一種方式就是通過(guò)不斷的改變ImageView控件的橫縱坐標,同時(shí)更換背景圖片即可。
3、 表格布局
表格布局主要以行列的形式來(lái)管理子控件,其中每一行即一個(gè)TableRow對象,每個(gè)TableRow對象可以添加子控件,并且每加入一個(gè)空間即相當于添加了一列。本文中的示例效果如下所示:
表格界面布局文件內容如下:
表格布局內容<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<!-- 隱藏第2,3,4列 -->
<TableLayout
android:id="@+id/table1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:collapseColumns="1,2,3"
>
<TextView
android:id="@+id/txt1"
android:gravity="center"
android:text="Table1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<TableRow>
<TextView android:text="col0"></TextView>
<TextView android:text="col1"></TextView>
<TextView android:text="col2"></TextView>
<TextView android:text="col3"></TextView>
</TableRow>
</TableLayout>
<!-- 設置第二列可伸展,過(guò)長(cháng)可將后面的列擠出可使區 -->
<TableLayout
android:id="@+id/table2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:stretchColumns="1"
>
<TextView
android:id="@+id/txt2"
android:gravity="center"
android:text="Table2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
</TextView>
<TableRow>
<TextView android:text="col0"></TextView>
<TextView android:text="col1"></TextView>
<TextView android:text="col2"></TextView>
<TextView android:text="col3"></TextView>
</TableRow>
</TableLayout>
<!-- 設置第一列可以收縮 -->
<TableLayout
android:id="@+id/table3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:shrinkColumns="0"
>
<TextView
android:id="@+id/txt3"
android:gravity="center"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Table3"
>
</TextView>
<TableRow>
<TextView android:text="welcome to world of android"></TextView>
<TextView android:text="col1"></TextView>
<TextView android:text="col2"></TextView>
<TextView android:text="col3"></TextView>
</TableRow>
</TableLayout>
<!-- 對各列未作設置,即不可伸縮 -->
<TableLayout
android:id="@+id/table4"
android:gravity="center"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<TextView
android:id="@+id/txt3"
android:gravity="center"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Table4"
>
</TextView>
<TableRow>
<TextView android:text="col0"></TextView>
<TextView android:text="this column will be very long"></TextView>
<TextView android:text="col2"></TextView>
<TextView android:text="col3"></TextView>
</TableRow>
</TableLayout>
</LinearLayout>
展開(kāi)上述布局內容,最外層是一個(gè)垂直布局的LinearLayout的,在其中有四個(gè)TableLayout布局,分別展示了四種不同類(lèi)型的TableLayout布局方式。
4、 相對布局
5、 幀布局
點(diǎn)擊FrameLayout選項,將會(huì )進(jìn)入幀布局效果顯示界面,如下圖:
上圖看上去是不是有點(diǎn)不自然,這是因為上圖是通過(guò)兩個(gè)ImageView圖片顯示控件將兩張圖片疊在一起顯示的。先看下布局界面是怎么編寫(xiě)的:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/FrameLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView
android:id="@+id/img1"
android:src="@drawable/shirt"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ImageView>
<ImageView
android:id="@+id/img2"
android:paddingLeft="100dip"
android:paddingTop="18dip"
android:src="@drawable/head1"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ImageView>
</FrameLayout>
可見(jiàn)第一個(gè)ImageView控件顯示的是T-shirt圖片,而第二個(gè)ImageView控件則是顯示我愛(ài)羅的頭像。需要注意的是,在幀布局中,先添加的圖片會(huì )被后添加的圖片覆蓋。