安卓移动应用开发及实训

Android mobile development and application

安徽师范大学-计算机信息学院-2019-2020学年第一学期, 作者(授课教师): 周文

 

第二章 UI设计

一、控制UI界面

1.1 使用XML布局文件控制UI界面

1.2 在代码中控制UI界面

1.3 使用XML和Java代码混合控制UI界面

使用XML和Java代码混合控制UI界面,习惯上把变化小、行为比较固定的组件放在XML布局文件中,把变化较多、行为控制比较复杂的组件交给Java代码来管理。

1.4 开发自定义的View

Android中,所有的UI界面都是由View类和ViewGroup类及其子类组合而成的。其中,View类是所有UI组件的基类,而ViewGroup类是容纳这些UI组件的容器,其本身也是View类的子类。在ViewGroup类中,除了可以包含普通的View类外,还可以再次包含ViewGroup类。View类和ViewGroup类的层次结构如下图所示。

二、布局管理器

2.1 线性布局

2.2 表格布局

表格布局与常见的表格类似,它以行、列的形式来管理放入其中的UI组件。表格布局使用<TableLayout>标记定义,在表格布局中,可以添加多个<TableRow>标记,每个<TableRow>标记占用一行,由于<TableRow>标记也是容器,所以在该标记中还可添加其他组件,在<TableRow>标记中,每添加一个组件,表格就会增加一列。

在表格布局中,列可以被隐藏,也可以被设置为伸展的,从而填充可利用的屏幕空间,也可以设置为强制收缩,直到表格匹配屏幕大小。

2.3 帧布局

在帧布局管理器中,每加入一个组件,都将创建一个空白的区域,通常称为一帧,这些帧都会根据gravity属性执行自动对齐。默认情况下,帧布局是从屏幕的左上角(0,0)W坐标点开始布局,多个组件层叠排序,后面的组件覆盖前面的组件。

2.4 相对布局

相对布局是指按照组件之间的相对位置来进行布局,如某个组件在另一个组件的左边、右边、上方或下方等。

2.5 约束布局

约束布局是为了解决布局嵌套过多的问题以灵活的方式定位和调整各个组件。从Android studio 2.3起,官方模板默认使用ConstraintLayout。

实现该效果的代码如下:

约束布局可以使用的约束属性如下表所示:

XML属性描述
layout_constraintLeft_toLeftOf其属性值为其他UI组件的id属性,用于指定该组件的左侧位于哪个组件的左边
layout_constraintLeft_toRightOf其属性值为其他UI组件的id属性,用于指定该组件的左侧位于哪个组件的右边
layout_constraintRight_toLeftOf其属性值为其他UI组件的id属性,用于指定该组件的右侧位于哪个组件的左边
layout_constraintRight_toRightOf其属性值为其他UI组件的id属性,用于指定该组件的右侧位于哪个组件的右边
layout_constraintTop_toTopOf其属性值为其他UI组件的id属性,用于指定该组件的上面位于哪个组件的上边
layout_constraintTop_toBottomOf其属性值为其他UI组件的id属性,用于指定该组件的上面位于哪个组件的下边
layout_constraintBottom_toTopOf其属性值为其他UI组件的id属性,用于指定该组件的下面位于哪个组件的上边
layout_constraintBottom_toBottomOf其属性值为其他UI组件的id属性,用于指定该组件的下面位于哪个组件的下边
layout_constraintBaseline_toBaselineOf其属性值为其他UI组件的id属性,用于指定该组件的中间线对齐于哪个组件的中间线
layout_constraintStart_toEndOf其属性值为其他UI组件的id属性,用于指定该组件的水平起点对齐于哪个组件的水平终点
layout_constraintStart_toStartOf其属性值为其他UI组件的id属性,用于指定该组件的水平起点对齐于哪个组件的水平起点
layout_constraintEnd_toStartOf其属性值为其他UI组件的id属性,用于指定该组件的水平终点对齐于哪个组件的起点
layout_constraintEnd_toEndOf其属性值为其他UI组件的id属性,用于指定该组件的水平终点侧位于哪个组件的水平终点

三、基本组件

3.1 文本框(TextView)与编辑框(EditText

Android中提供了两种文本组件,一种是文本框(TextView),用于在屏幕上显示文本,另一种是编辑框(EditText),用于在屏幕上显示可编辑的文本框。其中,EditTextTextView类的子类。

  1. 文本框

  2. 编辑框

3.2 普通按钮和图片按钮

Android中提供了两种按钮组件,一种是普通按钮,另一种是图片按钮。这两种按钮的都是用于在UI界面上生成一个可以单击的按钮。当用户单击按钮时,将会触发一个onClick事件,可以通过为按钮添加单击事件监听器指定所要触的动作。

  1. 普通按钮

  2. 图片按钮

3.3 单选按钮和复选按钮

  1. 单选按钮

    Android中,单选按钮使用RadioButton表示,而RadioButton类又是Button的子类,所以单选按钮可以直接使用Button支持的各种属性。在XML布局文件中添加单选按钮的基本格式如下:

  2. 复选按钮

    Android中,复选按钮使用CheckBox表示,而CheckBox类又是Button的子类,所以复选按钮可以直接使用Button支持的各种属性。在XML布局文件中添加复选按钮的基本格式如下:

3.4 图像视图(ImageView

在使用ImageView组件显示图像时,通常可以将要显示的图片放置在res/drawable目录中,然后应用下面的代码将其显示在布局管理器中

XML属性描述
android:adjustViewBounds用于设置ImageView是否调整自己的边界来保持所显示图片的长宽比
android:maxHeight设置ImageView的最大高度,需要设置android:adjustViewBounds属性值为true,否则不起作用
android:maxWidth设置ImageView的最大宽度,需要设置android:adjustViewBounds属性值为true,否则不起作用
android:scaleType用于设置所显示的图片如何缩放或移动以适应ImageView的大小,其属性值可以是matrix(使用matrix方式进行缩放)、fitXY(对图片横向、纵向独立缩放,使得该图片完全适应于该ImageView,图片的纵横比可能会改变)、fitStart(保持纵横比缩放图片,直到该图片能完全显示在ImageView中,缩放完成后该图片放在ImageView的左上角)、fitCenter(保持纵横比缩放图片,直到该图片能完全显示在ImageView中,缩放完成后该图片放在ImageView的中央)、fitEnd(保持纵横比缩放图片,直到该图片能完全显示在ImageView中,缩放完成后该图片放在ImageView的右下角)、center(把图像放在ImageView的中间,但不进行任何缩放)、centerCrop(保持纵横比缩放图片,以使得图片能完全覆盖ImageView)或centerInside(保持纵横比缩放图片,以使得ImageView能完全显示该图片)
android:src用于设置ImageView所显示的Drawable对象的ID,例如,设置显示保存在res/drawable目录下的名称为flower.jpg的图片,可以将属性值设置为android:src="@drawable/flower"
android:tint用于为图片着色,其属性值可以是“#rgb”、“#argb”、“#rrggbb”或“#aarrggbb”表示的颜色值

3.5 列表选择框(Spinner

3.6 列表视图

  1. 直接使用ListView组件创建,在XML布局文件中添加ListView的基本格式如下:

  2. Activity继承ListActivity实现

    如果程序的窗口仅仅需要显示一个列表,则可以直接让Activity继承ListActivity来实现。继承了ListActivity的类中无须调用setContentView()方法来显示页面,而是可以直接为其设置适配器,从而显示一个列表。

3.7 日期、时间选择器

  1. 为了让用户能选择日期和时间,Android提供了日期、时间选择器,分别是DatePicker组件和TimePicker组件。这两个组件使用比较简单,可以在可视化界面设计器中,选择对应的组件将其拖曳到布局文件中。
  2. 为了在程序中可以获取用户选择的日期、时间,还需要为DatePicker组件和TimePicker组件添加事件监听器。其中DatePicker组件对应的事件监听器是OnDateChangedListener,而TimePicker组件对应的事件监听器是OnTimeChangedListener

3.8 计时器

计时器组件就是一个可显示从某个起始时间开始,一共过去了多长时间的文本,使用Chronometer表示。由于该组件继承自TextView,所以它将以文本的形式显示内容。

3.9 自动完成文本框(AutoCompleteTextView

自动完成文本框使用AutoCompleteTextView表示,用于实现允许用户输入一定字符后,显示一个下拉菜单,供用户从中选择,当用户选择某个菜单项后,按用户选择自动填写该文本框。

在屏幕中添加自动完成文本框,可以在XML布局文件中通过<AutoCompleteTextView>标记添加,基本语法格式如下:

XML属性描述
android:completionHint用于为弹出的下拉菜单指定提示标题
android:completionThreshold用于指定用户至少输入几个字符才会显示提示
android:dropDownHeight用于指定下拉菜单的高度
android:dropDownHorizontalOffset用于指定下拉菜单与文本之间的水平偏移。下拉菜单默认与文本框左对齐
android:dropDownVerticalOffset用于指定下拉菜单与文本之间的垂直偏移。下拉菜单默认紧跟文本框
android:dropDownWidth用于指定下拉菜单的宽度
android:popupBackground用于为下拉菜单设置背景

3.10 进度条(ProgressBar

3.11 拖动条和星级评分条

在Andriod中,提供了两种允许用户通过拖动来改变进度的组件,分别是拖动条和星级评分条

3.12 选项卡

选项卡主要由TabHostTabWidgetFrameLayout3个组件组成,用于实现一个多标签页的用户界面,通过它可以将一个复杂的对话框分割成若干个标签页,实现对信息的分类显示和管理。使用该组件不仅可以使界面简洁大方,还可以有效地减少窗体的个数。

3.13 图像切换器(ImageSwitcher

图像切换器使用ImageSwitcher表示,用于实现类似于Windows操作系统下的“Windows照片查看器”中的上一张、下一张切换图片的功能。

3.14 网格视图(GridView

3.15 画廊视图(Gallery

3.16 范例


本章结束

2019-9-1