Android(安卓)UI 布局
用户界面的基本构建块是从 View
类创建的 View 对象,它占据屏幕上的矩形区域,负责绘图和事件处理。视图是小部件的基类,用于创建交互式 UI 组件,如按钮、文本字段等。
ViewGroup
是 View
的子类,它提供了一个不可见的容器,用于保存其他视图或其他 ViewGroup
并定义其布局属性。
在第 3 级,我们有不同的布局,它们是 ViewGroup
类的子类,典型的布局定义了 Android 用户界面的视觉结构,可以在运行时使用 View/ViewGroup 对象创建,也可以使用简单的 XML 文件 main_layout.xml 声明布局,它位于项目的 res/layout 文件夹中。
布局参数
本教程更多地介绍了如何基于XML文件中定义的布局创建 GUI。布局可以包含任何类型的小部件,例如按钮、标签、文本框等:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="This is a TextView" />
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="This is a Button" />
<!-- 这里放置更多的 GUI 控件 -->
</LinearLayout>
创建布局后,可以在 ActivityonCreate()
回调实现中从应用程序代码加载布局资源,如下所示:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
Android 布局类型
Android 提供了许多布局,您将在几乎所有的 Android 应用程序中使用这些布局来提供不同的视图、外观和感觉。
编号 | 布局 & 描述 |
---|---|
1 | Linear Layout LnearLayout 是一个视图组,它在一个方向(垂直或水平)对齐所有子项。 |
2 | Relative Layout RelativeLayout 是在相对位置显示子视图的视图组。 |
3 | Table Layout TableLayout 是将视图分组为行和列的视图。 |
4 | Absolute Layout AbsoluteLayout 让您可以指定其子级的确切位置。 |
5 | Frame Layout FrameLayout 是屏幕上的占位符,可用于显示单个视图。 |
6 | List View ListView 是显示可滚动项列表的视图组。 |
7 | Grid 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)属性在定位视图对象时起着重要作用,它可以采用以下一个或多个常量值(用 |
分隔)。
常量 | 值 | 描述 |
---|---|---|
top | 0x30 | 将对象推到其容器的顶部,而不更改其大小。 |
bottom | 0x50 | 将对象推到其容器的底部,而不更改其大小。 |
left | 0x03 | 将对象推到其容器的左侧,而不更改其大小。 |
right | 0x05 | 将对象推到其容器的右侧,而不更改其大小。 |
center_vertical | 0x10 | 将对象放置在其容器的垂直中心,而不更改其大小。 |
fill_vertical | 0x70 | 如果需要,增加对象的垂直大小,使其完全填充其容器。 |
center_horizontal | 0x01 | 将对象放置在其容器的水平中心,而不更改其大小。 |
fill_horizontal | 0x07 | 如果需要,增加对象的水平大小,使其完全填充其容器。 |
center | 0x11 | 在垂直轴和水平轴上将对象放置在其容器的中心,而不更改其大小。 |
fill | 0x77 | 如果需要,增加对象的水平和垂直大小,使其完全填充其容器。 |
clip_vertical | 0x80 | 可以设置为将子对象的上边缘和/或下边缘剪切到其容器边界的附加选项。剪切将基于垂直重力:顶部重力将剪切底部边,底部重力将剪切顶部边,两者都不会剪切两条边。 |
clip_horizontal | 0x08 | 可以设置为将子对象的左边缘和/或右边缘剪切到其容器边界的附加选项。剪切将基于水平重力:左重力将剪切右边缘,右重力将剪切左边缘,两者都不会剪切两条边。 |
start | 0x00800003 | 将对象推到其容器的头部,而不更改其大小。 |
end | 0x00800005 | 将对象推到其容器的尾部,而不更改其大小。 |
视图标识
视图对象可能分配了一个唯一的 ID,该 ID 将在树中唯一标识视图。XML 标记内 ID 的语法为:
android:id="@+id/my_button"
以下是 @
和 +
符号的简要说明:
- @ 符号在字符串的开头表示 XML 解析器应该解析并展开 ID 字符串的其余部分,并将其标识为 ID 资源。
- + 符号意味着这是一个必须创建并添加到资源中的新资源名称。要创建视图对象的实例并从布局中捕获它,请使用以下:
Button myButton = (Button) findViewById(R.id.my_button);