• Android Video Tutorials

Android - UI 布局



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

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

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

Layout

布局参数

本教程主要介绍如何基于XML文件中定义的布局创建GUI。布局可以包含任何类型的widget,例如按钮、标签、文本框等。下面是一个包含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 布局类型

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

序号 布局及描述
1 线性布局 (LinearLayout)

LinearLayout是一个视图组,它沿单个方向(垂直或水平)排列所有子项。

2 相对布局 (RelativeLayout)

RelativeLayout是一个视图组,以相对位置显示子视图。

3 表格布局 (TableLayout)

TableLayout是一个视图,它将视图分组到行和列中。

4 绝对布局 (AbsoluteLayout)

AbsoluteLayout允许您指定其子项的确切位置。

5 框架布局 (FrameLayout)

FrameLayout是屏幕上的一个占位符,您可以使用它来显示单个视图。

6 列表视图 (ListView)

ListView是一个视图组,显示可滚动的项目列表。

7 网格视图 (GridView)

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: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属性在定位视图对象方面起着重要作用,它可以采用一个或多个(用'|'分隔)以下常量值。

常量 描述
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分配给它,这将唯一地标识树中的视图。XML标签中的ID语法为:

android:id="@+id/my_button"

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

  • @符号位于字符串的开头,表示XML解析器应该解析和扩展ID字符串的其余部分,并将其标识为ID资源。

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

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