第五章 用户界面基础(AutoCompleteTextView、DatePicker和TimePicker)

参考资料:
《Android应用程序开发》ISBN 9787302283164
参考软件:
Android Studio、Eclipse+ADT、Android SDK、JDK
AutoCompleteTextView
自动编辑文本框(AutoCompleteTextView)继承自EditText,能够接受用户的输入编辑,但是有这自己的特色功能:输入一定的字符以后会弹出下拉列表提示供用户选择,用户选择之后会自动填充文本框。这项功能正如浏览器的输入提示:

由于自动编辑文本框继承于EditText,它能够支持EditText的全部属性,但是在输入提示方面它有着自己的独特属性:
android:completionHint 为弹出下拉菜单指定提示标题
android:completionThreshold 指定输入多少个字符以后会出现提示
android:dropDownHeight 指定下拉菜单的高度
android:dropDownHorizontalOffset 指定下拉菜单和文本框的水平偏移
android:dropDownVerticalOffset 指定下拉带单和文本框的垂直偏移
android:dropDownWidth 指定下拉菜单宽度
android:popupBackground 为下拉菜单设置背景
输入提示框中会有我们输入信息的补充,因此我们需要给输入提示框配置信息,这是要通过适配器实现。下面我们创建一个带输入提示框的AutoCompleteTextView
实例操作:
1.在可视化界面拖入一个自动完成编辑框,并设置2个字符弹出提示和编辑框出布局正中间
<AutoCompleteTextView
android:id="@+id/autoCompleteTextView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:completionThreshold="2"
android:hint="请输入"
android:ems="10">
<requestFocus/>
</AutoCompleteTextView>
2.创建适配器。适配器可以通过java数组或资源文件创建,这里我们采用资源文件创建适配器
资源文件:
<?xml version="1.0"encoding="UTF-8"?>
<resources >
<string-array name="data">
<item >nanjing-xuanwu</item>
<item >nanjing-jiangning</item>
<item >nanjing-qixia</item>
<item >nanjing-jianye</item>
</string-array>
</resources>
java代码:
AutoCompleteTextView atc =(AutoCompleteTextView)findViewById(R.id.autoCompleteTextView1);//获取组件
ArrayAdapter<CharSequence> aa =ArrayAdapter.createFromResource(this, R.array.data,R.layout.support_simple_spinner_dropdown_item);//创建
3.绑定适配器
atc.setAdapter(aa);
运行结果

总结:对于AutoCompletionEditText使用,主要是完善它的提示功能。提示词使用适配器加入,对于适配器创建,主要有通过资源文件创建和java字符串创建两种。
DatePicker日期拾取器和TimePicker时间拾取器
为了能够让用户选择时间日期,安卓提供了DatePicker日期拾取器和TimePicker时间拾取器。这两个组建的使用十分简单,在eclipse的可视化界面上直接拖拽到布局中即可。当用户在事件日期选择器上进行选择之后,需要加将用户的选择读取出来,这需要给组件添加相应的监听器。
一 日期拾取器
1.在eclipse可视化界面上拖拽组件到布局中
<DatePicker
android:id="@+id/datePicker1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
2.布局中获取日期组件
DatePicker dp = (DatePicker)findViewById(R.id.datePicker1);
3.创建日历对象,获取当前的日历时间
Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int date = c.get(Calendar.DATE);
4.初始化日期选择器,并且绑定监听器
dp.init(year, month, date, new OnDateChangedListener() {
@Override
publicvoid onDateChanged(DatePicker arg0, int arg1, int arg2, int arg3) {
Toast.makeText(MainActivity.this,
MainActivity.this.year+ " " + MainActivity.this.month + " " + MainActivity.this.date,
Toast.LENGTH_LONG).show();
}
});
运行效果如下,事件监听方面:当点击日期后会有提示框显示

二 时间拾取器
1.在eclipse可视化界面上拖拽组件到布局中
<TimePicker
android:id="@+id/timePicker1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
2.布局中获取日期组件
TimePicker tp = (TimePicker)findViewById(R.id.timePicker1);
3.创建日历对象,获取当前的日历时间
Calendar c = Calendar.getInstance();
hour = c.get(Calendar.HOUR);
munite = c.get(Calendar.MINUTE);
second = c.get(Calendar.SECOND);
4.绑定监听器
tp.setOnTimeChangedListener(new OnTimeChangedListener() {
@Override
publicvoid onTimeChanged(TimePicker arg0, int arg1, int arg2) {
Toast.makeText(MainActivity.this,
MainActivity.this.hour+ " " + MainActivity.this.munite + " " + MainActivity.this.second,
Toast.LENGTH_LONG).show();
}
});
运行效果如下,点击时间选择之后会有提示框显示
