Android 简明教程
Android - UI Layouts
用户界面的基本构建块是一个 View 对象,该对象从视图类创建,在屏幕上占据一个矩形区域,并负责绘制和处理事件。视图是部件的基类,用于创建交互式 UI 组件,如按钮、文本字段等。
ViewGroup 是 View 的子类,提供容纳其他视图或其他视图组并定义其布局属性的不可见容器。
在第三级,我们有不同的布局,它们是 ViewGroup 类的子类,而典型的布局定义了 Android 用户界面的可视结构,可以使用 View/ViewGroup 对象在运行时创建,也可以使用位于项目 res/layout 文件夹中的简单 XML 文件 main_layout.xml 声明布局。
本教程更专注于根据在 XML 文件中定义的布局创建 GUI。布局可能包含任何类型的部件,如按钮、标签、文本框等。以下是具有 LinearLayout 的 XML 文件的一个简单示例−
<?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" />
<!-- More GUI components go here -->
</LinearLayout>
一旦创建布局,您就可以从您的应用程序代码中加载布局资源,在您的 Activity.onCreate() 回调实现中,如下所示−
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
Android Layout Types
Android 提供了许多布局,您几乎可以在所有 Android 应用程序中使用这些布局来提供不同的视图、外观和感觉。
Sr.No |
Layout & Description |
1 |
Linear Layout LinearLayout 是一个视图组,它将所有子视图在一个方向(垂直或水平)上对齐。 |
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,它在二维可滚动网格中显示项目。 |
Layout Attributes
每个布局具有一组定义该布局的视觉属性的特性。所有布局之间有一些通用的特性,而其他特性特定于该布局。以下是一些通用的特性,可应用于所有布局:
Sr.No |
Attribute & Description |
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:layout_width 布局的宽度。 |
13 |
android:paddingLeft 填充的布局左侧填充。 |
14 |
android:paddingRight 填充的布局右侧填充。 |
15 |
android:paddingTop 填充的布局顶部填充。 |
16 |
android:paddingBottom 填充的布局底部填充。 |
此处,宽度和高度是布局/视图的维度,可根据 dp(独立于密度的像素)、sp(独立于比例的像素)、pt(1/72 英寸的点数)、px(像素)、mm(毫米)和 in(英寸)指定。
你可以指定具有精确测量值的宽度和高度,但通常情况下,你将使用以下这些常量之一来设置宽度或高度:
-
android:layout_width=wrap_content 会告诉视图将其自身尺寸调整为其内容所需的尺寸。
-
android:layout_width=fill_parent 会告诉视图变得像其父级视图一样大。
Gravity 属性在定位视图对象中起着重要作用,并且可取以下常数值的一个或多个(由“|”分隔)。
Constant |
Value |
Description |
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 |
将对象推到其容器的结尾,而不改变其尺寸。 |
View Identification
视图对象可能有一个唯一的 ID 分配给它,该 ID 将在树中唯一地标识视图。XML 标记内部 ID 的语法为 -
android:id="@+id/my_button"
以下是 @ 和 + 号的简要说明 -
-
字符串开头处的 at 符号(@),表示 XML 解析器应解析并扩展 ID 字符串的其余部分并将其标识为 ID 资源。
-
加号 (+) 表示这是一个必须创建并添加到我们的资源中的新资源名称。要创建一个视图对象实例并从布局中捕获它,请使用以下命令 -
Button myButton = (Button) findViewById(R.id.my_button);