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" />