在Android中,共有五種佈局方式,分別是:LinearLayout(線性佈局),FrameLayout(幀佈局),AbsoluteLayout(絕對佈局),RelativeLayout(相對佈局), TableLayout(表格佈局);還有一種,是在Android4.0以後出現的新佈局:Grid ...
在Android中,共有五種佈局方式,分別是:LinearLayout(線性佈局),FrameLayout(幀佈局),AbsoluteLayout(絕對佈局),RelativeLayout(相對佈局),
TableLayout(表格佈局);還有一種,是在Android4.0以後出現的新佈局:GridLayout(網袋佈局)。下麵簡單介紹一下每個佈局的特點。
一.線性佈局:簡單來說,這個佈局就像它的名字一樣,裡面所有的控制項的擺放方式都是像直線一樣的擺放方式。要麼垂直,要麼水平。垂直或水平可以通過設置
android:orientation="vertical"屬性來確定控制項的擺放方式;vertical代表垂直,horizontal代表水平。當垂直佈局時,每一行就只有一個控制項,多個控制項依次垂直往下;
水平佈局時,只有一行,每一個控制項依次向右排列。
LinearLayout裡面還有一個特別的屬性:android:layout_weight="1",這是設置控制項的權重。舉個列子:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="temp.com.androidtouch.MainActivity"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按鈕1"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按鈕2"/> </LinearLayout>
這是一個線性佈局,裡面控制項的屬性還沒有給上權重,效果圖如下:
當我給控制項設置了權重之後:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="temp.com.androidtouch.MainActivity"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按鈕1" android:layout_weight="1"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按鈕2" android:layout_weight="3"/> </LinearLayout>
效果圖如下:
當我們設置了控制項的權重之後,控制項在整個佈局裡面所占的比例將會根據權重比來分配,權重是可以給小數的,但是我們基本上不會給。
權重是LinearLayout佈局里的屬性,其他的佈局中不能使用。
二.幀佈局:這是幾個佈局中最簡單的一個佈局,它會為每個添加進去的控制項創建單獨的幀,但是幀佈局的擺放控制項的方式是覆蓋式的,就拿這段代碼來說:
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="temp.com.androidtouch.MainActivity"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按鈕1" android:layout_weight="1"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按鈕2" android:layout_weight="3"/> </FrameLayout>
當我把佈局改為幀佈局時
兩個按鈕就會重合在一起,第二個按鈕會覆蓋在第一個按鈕之上。這就是幀佈局唯一的特點。
三.絕對佈局: AbsoluteLayout這個佈局方式很簡單,主要屬性就兩個: layout_x 和layout_y 控制項依靠這兩個屬性來定義自己在佈局中的X坐標和Y坐標。 以屏幕左上角為(0,0)的坐標軸的x,y值,當向下或向右移動時,坐標值將變大。AbsoluteLayout允許元素之間互相重疊。我們通常不推薦使用 AbsoluteLayout,因為AbsoluteLayout寫出來的佈局在不同的設備上使用時會變形,然後佈局就會很醜。
四.相對佈局: RelativeLayout可以理解為某一個控制項為參照物,來定位的佈局方式,基本屬性如下圖:
五.表格佈局:TableLayout類似Html裡面的Table。每一個TableLayout裡面有表格行TableRow,TableRow裡面可以具體定義每一個控制項。每個TableRow都會定義成一行。簡單來說,TableLayout就是以一個<TableLayout></TableLayout>標簽和多個<TableRow></TableRow>標簽組成。佈局裡面有兩個屬性,一是 android:shrinkColumns="1"表示某列被收縮,另一個是android:stretchColumns="0"表示某列被拉伸,還有一個android:collapseColumns=""表示某列被隱藏。當然,在TableLayout裡面可以合併行和和併列。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="表一 全局設置:列屬性設置" /> <TableLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:shrinkColumns="1" android:stretchColumns="0"> <TableRow> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="該列可伸展" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="該列可收縮" /> </TableRow> <TableRow> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="我像行方向伸展,我可以很長很長很長很長" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="我像列方向收縮,我可以很短很短很短很短" /> </TableRow> </TableLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="表二 單元格設置:指定屬性單元格" /> <TableLayout android:layout_width="350dp" android:layout_height="wrap_content" android:shrinkColumns="0,2" android:stretchColumns="1" > <TableRow> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第0列" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第1列" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第2列" /> </TableRow> <TableRow> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_column="1" android:text="我被指定在第一列" /> </TableRow> <TableRow> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_column="1" android:layout_span="2" android:text="我跨1列和2列 不信你看" /> </TableRow> </TableLayout> </LinearLayout>
這是一個包含TableLayout里基本的屬性的列子,效果圖如下:
五個佈局簡單介紹完了,就只剩下最後一個,網袋佈局。網袋佈局較為靈活,基本屬性如下圖:
再舉個用GridLayout寫的比較簡單的例子:
<?xml version="1.0" encoding="utf-8"?> <GridLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:columnCount="4" android:orientation="horizontal" android:rowCount="6"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="1" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="2" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="3" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="/" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="4" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="5" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="6" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="*" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="7" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="8" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="9" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="-" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="0" android:layout_columnSpan="2" android:layout_gravity="fill_horizontal"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="." /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="+" android:layout_rowSpan="2" android:layout_gravity="fill_vertical"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="=" android:layout_columnSpan="3" android:layout_gravity="fill_horizontal"/> </GridLayout>
效果圖如下:
佈局就做了下簡單的介紹,深入瞭解還是的靠自己。
第一次寫博客,有很多考慮不周的地方,望各位博友多多指教。