Android五大布局:FrameLayout、LinearLayout、AbsoluteLayout、RelativeLayout和TableLayout

Android SDK 定义了多种布局方式以方便用户设计 UI。各种布局方式均为 ViewGroup 类的子类,结构如图 1 所示。

Android五大布局:FrameLayout、LinearLayout、AbsoluteLayout、RelativeLayout和TableLayout
图 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,给这个布局起一个名字。

Android五大布局:FrameLayout、LinearLayout、AbsoluteLayout、RelativeLayout和TableLayout

Android五大布局:FrameLayout、LinearLayout、AbsoluteLayout、RelativeLayout和TableLayout

  • 新建了一个two.xml->点击Design->拖拽Button(3个)->形成如下图:

Android五大布局:FrameLayout、LinearLayout、AbsoluteLayout、RelativeLayout和TableLayout

 

 

      Android五大布局:FrameLayout、LinearLayout、AbsoluteLayout、RelativeLayout和TableLayout

  • 按住Ctrl,点击图中三个Button,再点击右侧菜单中layout_width的下拉菜单,将match_parent改为wrap_content,形成如图:

Android五大布局:FrameLayout、LinearLayout、AbsoluteLayout、RelativeLayout和TableLayout         Android五大布局:FrameLayout、LinearLayout、AbsoluteLayout、RelativeLayout和TableLayout

 

 

  • 点击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五大布局:FrameLayout、LinearLayout、AbsoluteLayout、RelativeLayout和TableLayout

 

 

  •  在上面的代码第三与第四行之间添加一句:android:gravity="center",可以看到三个button就居中了(左图),而改为android:gravity="center_horizontal",可以看到三个button就水平居中了(右图)。

Android五大布局:FrameLayout、LinearLayout、AbsoluteLayout、RelativeLayout和TableLayout

 

 

 Android五大布局:FrameLayout、LinearLayout、AbsoluteLayout、RelativeLayout和TableLayout

将源代码改为如下:

 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>

Android五大布局:FrameLayout、LinearLayout、AbsoluteLayout、RelativeLayout和TableLayout

  • 你可能会奇怪,每一个button中有两个android:layout_weight,
    • 第一个则是每个button在其中所占的权重,而上面有三个,每个都为1,则每个的权重即:每个权重(即1)/所有权重的和(即3),也就是1/3;如上图所示!!!
    • 第二个wrap_content:是layout_width和layout_height的属性值之一,表示和自身内容一样的长度。
  • LinearLayout 布局可使用嵌套。活用 LinearLayou 布局可以设计出各种各样漂亮的布局方式。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

上一篇:Ehlib9.0汉化


下一篇:python 基础(十五)--time和datatime模块