Android 简明教程

Android - UI Layouts

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

ViewGroupView 的子类,提供容纳其他视图或其他视图组并定义其布局属性的不可见容器。

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

layout

本教程更专注于根据在 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(英寸)指定。

你可以指定具有精确测量值的宽度和高度,但通常情况下,你将使用以下这些常量之一来设置宽度或高度:

  1. android:layout_width=wrap_content 会告诉视图将其自身尺寸调整为其内容所需的尺寸。

  2. 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"

以下是 @ 和 + 号的简要说明 -

  1. 字符串开头处的 at 符号(@),表示 XML 解析器应解析并扩展 ID 字符串的其余部分并将其标识为 ID 资源。

  2. 加号 (+) 表示这是一个必须创建并添加到我们的资源中的新资源名称。要创建一个视图对象实例并从布局中捕获它,请使用以下命令 -

Button myButton = (Button) findViewById(R.id.my_button);