android移动应用开发任务驱动教程:android 9.0+android studio 3.2
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.5 Android常用UI控件简介

控件是对数据和方法的封装,控件可以有自己的属性和方法。Android内建了一个内部的UI框架,并做了一些特殊的设计以让其在手机上能有良好的用户体验。在Android SDK中,跟JDK一样有Button、TextField、List、Grid等,但是这些控件都做了优化,提供了适合在手机上实现的控制。Android提供的UI控件允许建立应用程序的图形用户界面。

设计Android应用程序用户界面时常用的UI控件介绍如下:

(1)TextView控件。

TextView用于为用户显示文本。

TextView用于显示一些不能编辑的文本信息,看起来就像是GUI(Graphical User Interface, GUI,又称图形用户接口)里常见的Label,但是其实它不只是Label那么简单。它还提供一些独特的控制功能,例如可以将TextView里面的网址和E-mail链接转换成链接形式,在XML布局中使用属性android:autoLink即可实现。

TextView控件的示例代码如下:

<TextView
    android:id="@+id/textview1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:autoLink="all"
    android:text="欢迎访问www.baidu.com"  />

(2)EditText控件。

EditText是TextView预定义的子类,包括丰富的编辑功能。

EditText是TextView的子类,EditText扩展了TextView使其具备编辑文字的能力。可以设置EditText的很多控制功能,例如首字母大写、只允许输入数字、作为密码输入框等,还可以引用一些有定义样式的文本内容。

EditText控件的示例代码如下:

<EditText
    android:id="@+id/edittext1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/text1"  />

(3)AutoCompleteTextView控件。

AutoCompleteTextView继承了EditText,并且添加了额外的AutoComplete功能,能够实现动态匹配输入的内容。用户需要先设置一个Adapter以提供AutoComplete所需的数据源(AutoComplete就像是使用Google或百度搜索时提示的建议搜索词)。它实际上由两部分组成:一个是EditText用来输入字符,另一个是建议列表List。用户需要在代码中指定如何显示AutoComplete的建议列表。在用户输入时,它会显示自动完成建议的列表。

AutoCompleteTextView控件常用的方法如下:

①clearListSelection():用于清除选中的列表项。

②dismissDropDown():用于关闭存在的下拉菜单。

③getAdapter():用于获取适配器。

(4)MultiAutoCompleteTextView控件。

MultiAutoCompleteTextView继承了AutoCompleteTextView,并且扩展了它的功能,能够对用户输入的文本进行有效的扩充提示,而无须用户输入完整内容。因为在使用AutoCompleteTextView时有一个不便的地方:它做的是整个TextView中文本信息的全匹配。假设要输入的是一个句子而又要具备能提示里面单词的功能的话,AutoCompleteTextView就完成不了,因为它会将整个句子都作为匹配对象,所以无法进行单词建议。而MultiAutoCompleteTextView则解决了这个问题,它会根据用户输入的字符进行匹配而不是整个TextView中的文本信息。它的使用方法跟AutoCompleteTextView差不多。

(5)Button控件。

按钮在Android中是android.widget.Button类,可供用户进行单击操作,按钮上通常显示文字,也可以通过android:background属性为Button设置背景色或背景图片。它继承了TextView,所有TextView可配置的属性都可以在Button上配置,所以我们可以定义很多Button的样式,同时Button还扩展了部分功能让用户可以在文字的上下左右四个方向添加icon图片。

Button控件的示例代码如下:

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="普通按钮"
    android:typeface="serif"
    android:textStyle="bold"  />
<Button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="带图片按钮"
    android:drawableTop="@drawable/icon"  />

(6)ImageView控件。

ImageView控件用于在屏幕上显示任何Drawable对象,通常用来显示图片。ImageView继承自View类。ImageView控件的主要属性如表2-1所示。

表2-1 ImageView控件的主要属性

ImageView控件设置其要显示图片的方法有setImageResource()和setImageBitmap()。

ImageView控件的示例代码如下:

<ImageView
    android:src="@drawable/ btn_bg "
    android:id="@+id/imageView1"
    android:maxWidth="200px"
    android:maxHeight="200px"
    android:adjustViewBounds="true"
    android:layout_margin="5px"
    android:layout_height="180px"
    android:layout_width="180px"
    android:scaleType="centerInside"
    android:background="@android:color/white"
    android:tint="#ffff00"  />

(7)ImageButton控件。

ImageButton按钮的内容是图片,这跟Button不一样。Button的内容可以是文字或者文字+图片,但是ImageButton的内容只能是图片,而且ImageButton是继承ImageView,而不是Button,所以二者是不一样的。可以通过在XML布局里设置android:src属性指定显示的图片地址,也可以动态地通过代码调用setImageResource()方法来填充一个图片。

ImageButton控件的示例代码如下:

<ImageButton
    android:id="@+id/ibtnLogin"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/icon" />

(8)ToggleButton控件。

ToggleButton和Checkbox、radio按钮一样是一个有状态的按钮,它有一个开启或关闭状态。在开启状态时,按钮的下面有一条绿色的粗线;当它是在关闭状态时则粗线变成灰色的。可以通过配置android:textOn和android:textOff来配置对应两种不同状态时要显示的文字。

ToggleButton控件的示例代码如下:

<ToggleButton
    android:id="@+id/tbtnPlay"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textOn="播放"
    android:textOff="停止"  />

(9)CheckBox控件。

CheckBox是一个复选框,它存在两种状态:选中和未选中。用户可以通过调用CheckBox对象的setChecked()或toggle()方法来改变复选框的状态,通过调用isChecked方法获取选中的值。可以通过调用CheckBox的setOnCheckedChangeListener()方法来监听CheckBox的状态改变事件。

CheckBox控件的示例代码如下:

<CheckBox
    android:id="@+id/checkbox1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Java"  />
<CheckBox
    android:id="@+id/checkbox2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="C#"
    android:checked="true"  />

(10)RadioButton控件与RadioGroup控件。

RadioButton是一个单选框,只允许用户在多个选项里选择其中一个,而RadioGroup用于组织一个或多个单选按钮。为了让多个选项中仅能选择一个,我们需要将多个选项放到一个分组中,这样默认每个分组只允许用户选中分组中的一项。为了使用RadioButton,首先要创建一个RadioGroup分组,然后将RadioButton放到分组中。所有在RadioGroup中的RadioButton默认都是未选中状态,当然也可以通过XML布局设置某个RadioButton处于选中状态。跟CheckBox一样,可以调用setChecked()和toggle()方法来改变它里面的状态值,也可以监听它的状态改变事件。

RadioButton控件的示例代码如下:

<RadioButton
    android:id="@+id/radiobutton1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="男"  />
<RadioButton
    android:id="@+id/radiobutton2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="女"
    android:checked="true"  />

(11)DatePicker控件与TimePicker控件。

DatePicker控件用来选取日期,TimePicker控件用来选取一天中的时间。选择日期和时间的功能,在很多应用程序中经常用到,Android由于受到手机屏幕大小的限制而无法像其他GUI框架一样创建复杂的布局来显示日期和时间,所以它们在Android中的展现比较简洁。我们可以在XML布局文件中通过声明DatePicker和TimePicker节点来创建这两个对象。

(12)ProgressBar控件。

ProgressBar控件显示为进度条,也就是一个表示运转的过程,例如发送短信、连接网络等,表示一个过程正在执行中。一般只要在XML布局中定义就可以了。

ProgressBar控件的常用方法如下:

①setIndeterminate():设置进度条是否自动运转。

②setProgressStyle():设置显示进度条风格,其取值为ProgressDialog.STYLE_HORIZONTAL或ProgressDialog.STYLE_SPINNER。

③setProgress():设置进度条的进度。

④setMax():设置进度条的最大值。

⑤getProgress():获取进度条的当前进度。

ProgressBar控件的示例代码如下:

<ProgressBar android:id="@+id/pb"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical">
</ProgressBar>

此时,没有设置它的风格,那么它就是圆形的,会一直旋转的进度条。

添加以下代码,设置一个style风格属性,该ProgressBar就有了一个风格,这里表示大号ProgressBar的风格:

style="android:attr/progressBarStyleLarge"

(13)SeekBar控件。

SeekBar是一个可拖动的进度条控件。拖动条类似进度条,不同的是用户可以拖动滑块改变SeekBar的值,例如手机的音量调节,同时还允许用户改变滑块的外观。由于拖动条可以被用户控制,所以需要对其进行事件监听,这就需要实现SeekBar.OnSeekBarChangeListener接口,监听滑块位置的改变。在SeekBar中需要监听3个事件,分别是:数值的改变(onProgressChanged)、开始拖动(onStartTrackingTouch)、停止拖动(onStopTrackingTouch)。在onProgressChanged中我们可以得到当前数值的大小。

SeekBar控件的常用方法如下:

①getProgress():获取拖动条的当前值。

②setMax():设置拖动条的最大值。

③setProgress:设置拖动条的当前值。

SeekBar控件的示例代码如下:

<SeekBar
    android:id="@+id/seek"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:max="100"
    android:progress="50"
    android:secondaryProgress="75"   />