Android SDK 定义了多种布局方式以方便用户设计 UI。各种布局方式均为 ViewGroup 类的子类,结构如图 1 所示。
图 1 Android SDK 布局方式结构图
以下将对 FrameLayout(单帧布局)、LinearLayout(线性布局)、AbsoluteLayout(绝对布局)、RelativeLayout(相对布局)和TableLayout(表格布局)进行简单的介绍。
LinearLayout(线性布局)
- 线性布局(LinearLayout)主要以水平或垂直方式来显示界面中的控件。
- 当控件水平排列时,显示顺序依次为从左到右;
- 当控件垂直排列时,显示顺序依次为从上到下。
- 线性布局中,每行或每列中只允许有一个子视图或控件。
-
LinearLayout的最主要的属性有:
-
android:gravity:设置内部控件的显示位置。
-
android:orientation:设置内部控件的排列方向,常量horizontal(默认值)表示水平排列,vertical表示垂直排列。
-
android:layout_weight:设置内部控件在LinearLayout中所占的权重。
-
-
注意:当控件使用权重属性时,布局宽度或高度属性值通常设置为0。
-
所有的组件都有一个 layout_weight 值,默认为0。意思是需要显示多大的视图就占据多大的屏幕空间。
-
若赋值为大于 0 的值,则将可用的空间分割,分割的大小取决于当前的 layout_weight 数值与其他空间的 layout_weight 值的比率,即权重。
-
实例 LinearLayoutDemo 演示了 LinearLayout 布局的使用方法,效果如下图所示。
- 点击Layout,右键New->Layout resource file,给这个布局起一个名字。
- 新建了一个two.xml->点击Design->拖拽Button(3个)->形成如下图:
- 按住Ctrl,点击图中三个Button,再点击右侧菜单中layout_width的下拉菜单,将match_parent改为wrap_content,形成如图:
- 点击Text,查看相关代码,如下:
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent"> 6 7 <Button 8 android:id="@+id/button7" 9 android:layout_width="wrap_content" 10 android:layout_height="wrap_content" 11 android:text="Button" /> 12 13 <Button 14 android:id="@+id/button8" 15 android:layout_width="wrap_content" 16 android:layout_height="wrap_content" 17 android:text="Button" /> 18 19 <Button 20 android:id="@+id/button10" 21 android:layout_width="wrap_content" 22 android:layout_height="wrap_content" 23 android:text="Button" /> 24 </LinearLayout>
- 将第三行的vertical,改为horizontal,可以看到一改完这个界面就变成水平排列的了。
- LinearLayout 布局通过 android:orientation="horizontal" 属性将布局设置为横向线性排列。
- LinearLayout 布局通过 android:orientation="vertical" 属性将布局设置为纵向线性排列。
- 在上面的代码第三与第四行之间添加一句:android:gravity="center",可以看到三个button就居中了(左图),而改为android:gravity="center_horizontal",可以看到三个button就水平居中了(右图)。
将源代码改为如下:
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:gravity="center" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent"> 7 8 <Button 9 android:id="@+id/button7" 10 android:layout_weight="1" 11 android:layout_width="wrap_content" 12 android:layout_height="0dp" 13 android:text="Button" /> 14 15 <Button 16 android:id="@+id/button8" 17 android:layout_weight="1" 18 android:layout_width="wrap_content" 19 android:layout_height="0dp" 20 android:text="Button" /> 21 22 <Button 23 android:id="@+id/button10" 24 android:layout_weight="1" 25 android:layout_width="wrap_content" 26 android:layout_height="0dp" 27 android:text="Button" /> 28 </LinearLayout>
- 你可能会奇怪,每一个button中有两个android:layout_weight,
- 第一个则是每个button在其中所占的权重,而上面有三个,每个都为1,则每个的权重即:每个权重(即1)/所有权重的和(即3),也就是1/3;如上图所示!!!
- 第二个wrap_content:是layout_width和layout_height的属性值之一,表示和自身内容一样的长度。
- LinearLayout 布局可使用嵌套。活用 LinearLayou 布局可以设计出各种各样漂亮的布局方式。