Android(安卓)UI 布局

用户界面的基本构建块是从 View 类创建的 View 对象,它占据屏幕上的矩形区域,负责绘图和事件处理。视图是小部件的基类,用于创建交互式 UI 组件,如按钮、文本字段等。

ViewGroupView 的子类,它提供了一个不可见的容器,用于保存其他视图或其他 ViewGroup 并定义其布局属性。

在第 3 级,我们有不同的布局,它们是 ViewGroup 类的子类,典型的布局定义了 Android 用户界面的视觉结构,可以在运行时使用 View/ViewGroup 对象创建,也可以使用简单的 XML 文件 main_layout.xml 声明布局,它位于项目的 res/layout 文件夹中。

布局参数

本教程更多地介绍了如何基于XML文件中定义的布局创建 GUI。布局可以包含任何类型的小部件,例如按钮、标签、文本框等:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical" >
  6. <TextView android:id="@+id/text"
  7. android:layout_width="wrap_content"
  8. android:layout_height="wrap_content"
  9. android:text="This is a TextView" />
  10. <Button android:id="@+id/button"
  11. android:layout_width="wrap_content"
  12. android:layout_height="wrap_content"
  13. android:text="This is a Button" />
  14. <!-- 这里放置更多的 GUI 控件 -->
  15. </LinearLayout>

创建布局后,可以在 ActivityonCreate() 回调实现中从应用程序代码加载布局资源,如下所示:

  1. public void onCreate(Bundle savedInstanceState) {
  2. super.onCreate(savedInstanceState);
  3. setContentView(R.layout.activity_main);
  4. }

Android 布局类型

Android 提供了许多布局,您将在几乎所有的 Android 应用程序中使用这些布局来提供不同的视图、外观和感觉。

编号布局 & 描述
1Linear Layout

LnearLayout 是一个视图组,它在一个方向(垂直或水平)对齐所有子项。

2Relative Layout

RelativeLayout 是在相对位置显示子视图的视图组。

3Table Layout

TableLayout 是将视图分组为行和列的视图。

4Absolute Layout

AbsoluteLayout 让您可以指定其子级的确切位置。

5Frame Layout

FrameLayout 是屏幕上的占位符,可用于显示单个视图。

6List View

ListView 是显示可滚动项列表的视图组。

7Grid View

GridView 是一个以二维可滚动网格显示项目的 ViewGroup


布局属性

每个布局都有一组属性,用于定义该布局的视觉属性。所有布局中很少有通用属性,它们是特定于该布局的其他属性。以下是常见属性,将应用于所有布局:

编号属性 & 描述
1

android:id

这是唯一标识视图的 ID。

2

android:layout_width

这是布局的宽度。

3

android:layout_height

这是布局的高度。

4

android:layout_marginTop

这是布局顶部的额外空间。

5

android:layout_marginBottom

这是布局底部的额外空间。

6

android:layout_marginLeft

这是布局左侧的额外空间。

7

android:layout_marginRight

这是布局右侧的额外空间。

8

android:layout_gravity

指定子视图如何定位。

9

android:layout_weight

指定了布局中应该为视图分配多少额外空间。

10

android:layout_x

指定布局的 x 坐标。

11

android:layout_y

指定布局的 y 坐标。

12

android:paddingLeft

为布局左填充。

13

android:paddingRight

为布局右填充。

14

android:paddingTop

为布局顶部填充。

15

android:paddingBottom

为布局底部填充。

这里的宽度和高度是布局/视图的尺寸,可以指定为 dp(密度无关像素)、sp(比例无关像素),pt(点,即 1/72 英寸)、px(像素)、mm(毫米),最后以(英寸)为单位。

您可以使用精确的测量值指定宽度和高度,但更常见的情况是,您将使用这些常量之一来设置宽度或高度:

  • android:layout_width=wrap_content 告诉视图根据其内容所需的维度调整自身大小。

  • android:layout_width=fill_parent 告诉视图与其父视图一样大。

重力(Gravity)属性在定位视图对象时起着重要作用,它可以采用以下一个或多个常量值(用 | 分隔)。

常量描述
top0x30将对象推到其容器的顶部,而不更改其大小。
bottom0x50 将对象推到其容器的底部,而不更改其大小。
left0x03将对象推到其容器的左侧,而不更改其大小。
right0x05将对象推到其容器的右侧,而不更改其大小。
center_vertical0x10将对象放置在其容器的垂直中心,而不更改其大小。
fill_vertical0x70如果需要,增加对象的垂直大小,使其完全填充其容器。
center_horizontal0x01将对象放置在其容器的水平中心,而不更改其大小。
fill_horizontal0x07如果需要,增加对象的水平大小,使其完全填充其容器。
center0x11在垂直轴和水平轴上将对象放置在其容器的中心,而不更改其大小。
fill0x77如果需要,增加对象的水平和垂直大小,使其完全填充其容器。
clip_vertical0x80可以设置为将子对象的上边缘和/或下边缘剪切到其容器边界的附加选项。剪切将基于垂直重力:顶部重力将剪切底部边,底部重力将剪切顶部边,两者都不会剪切两条边。
clip_horizontal0x08可以设置为将子对象的左边缘和/或右边缘剪切到其容器边界的附加选项。剪切将基于水平重力:左重力将剪切右边缘,右重力将剪切左边缘,两者都不会剪切两条边。
start0x00800003将对象推到其容器的头部,而不更改其大小。
end0x00800005将对象推到其容器的尾部,而不更改其大小。

视图标识

视图对象可能分配了一个唯一的 ID,该 ID 将在树中唯一标识视图。XML 标记内 ID 的语法为:

  1. android:id="@+id/my_button"

以下是 @+ 符号的简要说明:

  • @ 符号在字符串的开头表示 XML 解析器应该解析并展开 ID 字符串的其余部分,并将其标识为 ID 资源。
  • + 符号意味着这是一个必须创建并添加到资源中的新资源名称。要创建视图对象的实例并从布局中捕获它,请使用以下:
  1. Button myButton = (Button) findViewById(R.id.my_button);