Android控件有很多,当这些控件在界面上显示时,必须得用布局方式对其进行管理,否则界面上将会显得杂乱无章。Android SDK中内置了5中布局模型,Android Developer可以通过这些布局方式对控件进行管理,从而构架出各种需要的应用页面。
第一种:线性布局
线性布局,LinearLayout 是Android中一种最基本的布局方式,分为水平(horizontal)和垂直(vertical)两种,通过对参数的设置可以控制各个控件在整个布局中的大小。
如以下代码:
<?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"
> <!-- 定义了一个线性布局,方式是垂直的 -->
<Button
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="上"
/> <!-- 向线性布局中添加一个普通的按钮控件 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
> <!-- 向线性布局中添加一个水平的线性布局 -->
<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="右下"
/>
</LinearLayout>
</LinearLayout>
可以发现,这个和html标记类似,可以进行嵌套。
其中,android:orientation="vertical" 参数表明线性方式是垂直的 而android:orientation="horizontal"则表明是水平的
android:layout_width="fill_parent" 表明此view的宽度是填充父view的,而android:layout_height="wrap_content"表明高度是根据此view中的内容改变而改变的。
第二种:表格布局
表格布局,TableLayout 是以行列的形式来管理子控件的,在这种布局中的每一行都可以是一个view或者TableRow控件,并且TableRow控件中还能添加子控件。这点和HTML中的Table是类似的,每一行相当于一个<tr> ,而TableRow中的每一列则相当于一个<td>,如下:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="表头"
/> <!-- 在表格的第一行填充一个文本控件 -->
<TableRow
android:gravity="center"
> <!-- 再向表格中添加一行 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第1列"
/> <!-- 在该行的第一列添加一个文本控件 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第2列"
/> <!-- 在该行的第二列添加一个文本控件 -->
</TableRow>
<TableRow
android:gravity="center"
> <!-- 再向表格中添加一行 -->
<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>
</TableLayout>
以上布局用HTML表示即为:
<table>
<tr>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td></td>
</tr>
</table>
第三种:相对布局
相对布局,RelativeLayout 是根据所选取的参照控件来进行布局的,设置的方位也可以通过参数来设定。比如:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这是一个很长很长的按钮哦!!!!"
android:layout_centerInParent="true"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="左上方"
android:layout_above="@id/button1"
android:layout_alignLeft="@id/button1"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="右下方"
android:layout_below="@id/button1"
android:layout_alignRight="@id/button1"
/>
</RelativeLayout>
由上可知,android:layout_above、android:layout_below、android:layout_alignLeft、android:layout_alignRight 等参数分别表示 上、下、左、右等四个相对位置,而
android:layout_centerInParent表明所选的参照控件不仅可以是其他子控件,也可以是父控件。
第四种:绝对布局
依然和HTML相似,既然有相对布局,就会有绝对布局,也称坐标布局,AbsoluteLayout,这种布局方式非常灵活,可以自由控制控件的坐标,下面以一个登录页面为例:
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="用户名"
android:layout_x="10px"
android:layout_y="20px"
/>
<EditText
android:layout_width="90px"
android:layout_height="wrap_content"
android:layout_x="70px"
android:layout_y="10px"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="密 码"
android:layout_x="10px"
android:layout_y="75px"
/>
<EditText
android:layout_width="90px"
android:layout_height="wrap_content"
android:layout_x="70px"
android:layout_y="60px"
/>
</AbsoluteLayout>
其中layout_x 和layout_y两个属性可以设置以左上角为中心的坐标轴的位置(水平方向为x)
第五种:单帧布局
单帧布局,FrameLayout,不需要设置任何特殊的属性,这种布局中的所有控件都将被放置在布局的左上角,并覆盖在前一子控件的上层,举例略。