【网学网提醒】:网学会员为您提供Beginning_Android_2中午版5参考,解决您在Beginning_Android_2中午版5学习中工作中的难题,参考学习。
kouming366(
网学)贡献
《Android2基础教程》-第5章使用基本的小部件
第5章使用基本的小部件
任何GUI工具包都包含一些基本的小部件:字段、标签、按钮,等等。Android的工具包在此也没有什么不同;通过基本的小部件可以让我们理解小部件在Android活动中的工作方式。
5.1标签
最简单的小部件就要数标签(label)了,也就是Android中的TextView。与大多数GUI工具包一样,标签中包含的文本无法被用户直接编辑。通常,我们都是使用标签来标识邻近的小部件(例如,“名字:”标签会放在要用户填写名字的字段旁边)。
在Java中,可以通过创建TextView的实例来创建一个标签。不过,更常见的方式则是在XML布局文件中创建标签,方法是向布局中添加一个TextView元素,并通过android:text属性来指定标签的值。如果你打算基于某种条件(例如,国际化语言转换)来切换标签内容,那么最好是在XML中使用资源引用,具体内容我们留到第20章再讨论。TextView也有很多其他与标签有关的属性,简介如下。
??
android:typeface:设置标签中字体的类型(例如monospace,即等宽字体)。android:textStyle:设置标签中字体的样式是粗体(bold)、斜体(italic)还是粗斜体(bold_italic)。android:textColor:设置标签中文本的颜色,使用RGB十六进制格式(例如,红色是#FF0000)。
例如,在Basic/Label项目中,你可以找到以下布局文件:
这个简单的布局,再加上由Android项目构建
程序(如androidcreateproject)生成的初始Java代码,就可以得到如图5-1所示的结果。
1/10
《Android2基础教程》-第5章使用基本的小部件
图5-1LabelDemo示例应用
程序 5.2按钮
你在前两章已经看到Button小部件的应用了。事实上,Button是TextView的子类,因此前一节讨论的所有属性也都适用于对按钮的文本进行格式化。不过,Android1.6又新增了一个新特性,用于在Button上声明on-click侦听器。除了以实现View.OnClickListener接口的方式来定义某些对象(如活动)之外,现在我们可以采取简单一些的方法了。??在Activity上定义某个方法,接收按钮作为View参数,返回void,而且带public修饰符。在XML布局文件内的Button元素中,添加android:o
nClick特性,这个特性的值就是上一步定义的方法名。
例如,如果在Activity中定义了下面这个方法:
publicvoidsomeMethod(ViewtheButton){//实现某些操作的代码}
那么,就可以在XML中通过android:onClick特性来声明相应的Button:
这样,Android就完全可以把Button与单击处理
程序关联起来了。
2/10
《Android2基础教程》-第5章使用基本的小部件
5.3图像
为帮你在活动中嵌入图像,Android提供了两个小部件:ImageView和ImageButton。顾名思义,这两个小部件分别与TextView和Button在本质上一样,只不过都与图像有关。这两个小部件(在XML布局中)都有一个android:src特性,用于指定要使用的图像。图像在Android中一般被叫做可绘制(drawable)资源,详细讨论请参考第20章。此外,还可以使用setImageURI()方法基于某个内容提供
程序的URI来设置图像。
ImageButton是ImageView的子类,混合了标准的Button行为,用于响应单击之类的操作。下面来看一看示例项目Basic/ImageView的main.xml布局文件:
而仅使用生成的活动代码的结果如图5-2所示(显示了一幅图像)。
图5-2ImageViewDemo示例应用
程序 5.4字段
除了按钮和标签之外,字段就是大多数GUI工具包中的必备元素了。在Android中,字段是通过EditText小部件实现的,EditText是用作标签的TextView的子类。EditText具有标准的TextView属性(例如android:textStyle),还有一些专用于构建字段的属
3/10
《Android2基础教程》-第5章使用基本的小部件性。????android:autoText:控制字段是否应该提供自动拼写辅助功能。android:capitalize:控制字段是否应该自动大写输入文本的第一个字母(对于英文名字和市名比较有用)。android:digits:指定字段只接受某些数字。android:singleLine:控制字段是单选输入框还是多行输入框(换句话说,按回车键是将焦点移到下一个小部件,还是换行?)
其中几个属性同样可以在新增的android:inputType特性中使用,该特性是在Android1.5新增的“软键盘”模块中添加的(具体内容将在第10章讨论)。例如,Basic/Field项目包含以下带有EditText小部件的XML布局文件:
我们注意到,这里将android:singleLine设置为"false",因此用户就可以键入多行文本了。在这个项目中,FieldDemo.java文件向输入字段中随便
填充了一些文本内容:
packagecommonsware.android.field;importandroid.app.Activity;importandroid.os.Bundle;importandroid.widget.EditText;publicclassFieldDemoextendsActivity{@OverridepublicvoidonCreate(Bundleicicle){super.onCreate(icicle);setContentView(R.layout.main);EditTextfld=(EditText)findViewById(R.id.field);fld.setText("LicensedundertheApacheLicense,Version2.0"+"(the\"License\");youmaynotusethisfile"+"exceptincompliancewiththeLicense.Youmay"+"obtainacopyoftheLicenseat"+"apache.org/licenses/LICENSE-2.0");}}
在构建并安装到模拟器之后,就可以看到如图5-3所示的结果。
4/10
《Android2基础教程》-第5章使用基本的小部件
图5-3FieldDemo示例应用
程序 另一种形式的字段能够提供自动完成支持,使用户不必输入完整的内容也可以完成字段。这种字段在Android中是通过AutoCompleteTextView小部件来实现的,第9章将详细介绍这个小部件。
5.5复选框
经典的复选框有两种状态:选中和未选中。单击复选框可以在这两种状态间切换,以表示选还是不选(例如,“在订单中选定快速发货”。)
在Android中,CheckBox小部件就是复选框。这个小部件的基类是TextView,因此也可以使用
android:textColor之类的属性对它进行格式化。而在Java代码中,可以调用下列方法。???isChecked():确定复选框是否被选中。setChecked():强制选中或取消选中复选框。toggle():像用户单击一样切换复选框的选中和未选中状态。
同样,也可以为复选框状态的变化
注册一个侦听器对象(在这里,侦听器是OnCheckedChangeListener的实例)。例如,下面就是Basic/CheckBox项目中的一个简单的复选框布局:
《Android2基础教程》-第5章使用基本的小部件
android:layout_height="wrap_content"android:text="Thischeckboxis:unchecked"/>
对应的CheckBoxDemo.java负责获取和改变复选框的行为:
publicclassCheckBoxDemoextendsActivityimplementsCompoundButton.OnCheckedChangeListener{CheckBoxcb;@OverridepublicvoidonCreate(Bundleicicle){super.onCreate(icicle);setContentView(R.layout.main);cb=(CheckBox)findViewById(R.id.check);cb.setOnCheckedChangeListener(this);}publicvoidonCheckedChanged(CompoundButtonbuttonView,booleanisChecked){if(isChecked){cb.setText("Thischeckboxis:checked");}else{cb.setText("Thischeckboxis:unchecked");}}}
注意,由于实现了OnCheckedChangeListener接口,因此
这个活动提供了自己的侦听器,用于处理复选框状态的变化(通过cb.setOnCheckedChangeListener(this))。这个侦听器的回调方法是onCheckedChanged(),该方法接收状态已经改变的复选框和新状态作为参数。在这里,我们通过更新复选框的文本来反映复选框的变化。结果如何?单击复选框会立即导致文本更新,如图5-4和5-5所示。
6/10
《Android2基础教程》-第5章使用基本的小部件
图5-4CheckBoxDemo示例应用程序,未选中复选框
图5-5相同的应用程序,选中的了复选框
5.6单选按钮
与其实工具包对单选按钮的实现一样,Android的单选按钮也有两种状态(类似复选框),但可以将它们组织成一组,从而让这一组单选按钮在任意时刻都只有一个处理选中状态。RadioButton与CheckBox一样,都继承自CompoundButton,后者又继承自TextView。因此,所有标准的TextView属性,诸如字体、样式、颜色属性等,都可以用于控制单选按钮的外观。类似地,你可以在RadioButton上调用isChecked(),以检查它是否被选中,或者调用toggle()来
7/10
《Android2基础教程》-第5章使用基本的小部件选择它,等等——与使用CheckBox一样。多数情况下,都需要把RadioButton放在一个RadioGroup中。RadioGroup表示是的一组状态受约束的单选按钮,也就是任何时候该组中都只能有一个单选按钮被选中。如果在XML布局中为RadioGroup指定了android:id属性,那么就可以在Java代码中使用下列方法访问它。???check():通过ID检查某个单选按钮(例如group.check(R.id.radio1))。clearCheck():清除所有单选按钮,即组中没有一个单选按钮被选中。getCheckedRadioButtonId():取得当前被选中按钮的ID(如果没有任何按钮被选中,则返回-1)。示例应用程序Basic/RadioButton的XML布局文件中就包含了使用RadioGroup封装一组RadioButton的例子:
在使用Android生成的基本Java代码的情况下,可以通过这个布局得到如图5-6所示的结果。
8/10
《Android2基础教程》-第5章使用基
本的小部件
图5-6RadioButtonDemo示例应用程序
在初始状态下,由于单选按钮组进行了初始设置,因此没有一个按钮被选中。如果想预先选中某个单选按钮,可以在活动的onCreate()回调中调用RadioButton的setChecked()方法,或RadioGroup的check()方法。
5.7视图
前几节介绍的所有小部件都扩展了View,而这个类也给所有小部件提供了很多前面未曾介绍的有用的属性和方法。
5.7.1属性
View中最常用的一些属性是下面这些用于控制焦点次序的属性:????android:nextFocusDownandroid:nextFocusLeftandroid:nextFocusRightandroid:nextFocusUp
另外一个有用的属性是android:visibility,用于控制小部件在初始状态下是否可见。
5.7.2方法
调用setEnabled()方法可以启用或停用小部件,而调用isEnabled()方法则可以检测小部件是否启用。常见的一种情况就是根据用户对CheckBox或RadioButton的选择,来禁用某些小部件。
9/10
《Android2基础教程》-第5章使用基本的小部件通过requestFocus()方法可以使某个小部件获得焦点,而通过isFocused()可以检测小部件是否拥有焦点。在禁用小部件的情况下,应该通过这两个方法来确保被禁用的小部件不会获得焦点。为了方便对构成活动整体视图的小部件及其容器进行导航,可以使用下列方法。???getParent():查找父部件或容器。findViewById():查找带有特定ID的子部件。getRootView():取得视图树的根部件(也就是通过setContentView()提供给活动的小部件)。
5.7.3颜色
Android的小部件有两种颜色特性。有些类似于android:background,接受一种颜色值(或者一幅作为背景的图像)。有的则类似于TextView(或其子类)的android:textColor,可以接受一个ColorStateList,通过相应的Java访问器(在这里是setTextColor())来设置。通过ColorStateList可以为不同条件指定不同颜色。例如,当TextView是当前列表中的被选择项时,可以显示一种颜色;而当它未被选择时,可以显示另一种颜色(第7章将讨论选择小部件)。这种切换通过与TextView关联的默认ColorStateList来实现。如果想在Java代码中改变TextView的颜色,有两种途径。?使用ColorStateList.valueOf()方法,这个方法返回ColorStateList(所有状态都被认为具有同一种颜色),并以之作为valueOf()的参数。这个方法是android:textColor在Java中的等效手段,可以让TextView始终都是一种特定的颜色,与环境无关。使用针对不同状态的值创建ColorStateList,通过构造函数或通过XML文档。
10/10
1