前一天学习了学习了表示控件尺寸时所使用的px、pt、dp和sp等单位。其中px表示像素,pt表示点,dp表示与密度无关的像素,sp表示放大因子像素。将pt、dp和sp转换px时,需要用到DisplayMetrics类的xdpi、density和scaleDensity等字段。
今天将学习自动完成文本框(AutoCompleteTextView)控件。该控件派生自EditText控件。当用户在自动完成文本框控件中输入信息时,该文本框会以下拉菜单的方式弹出用户要输入的信息,当在下拉菜单中选中某个信息后,该信息会在自动完成文本框控件中显示,如图1所示。
图1 自动完成文本框控件示例
1 自动完成文本框的添加
在界面布局文件中添加自动完成文本框控件,即AutoCompleteTextView控件。
<AutoCompleteTextView
android:id="@+id/auto"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:completionHint="请选择你喜欢的球队"
android:completionThreshold="1"/>
其中,completionHint属性指定了在下拉菜单中显示的提示;completionThreshold属性指定了用户在输入几个字符后,自动完成文本框控件才显示提示的下拉菜单。
2 提示信息的定义
定义一个字符串数组作为控件下拉菜单中显示的内容,如下所示:
String[]teams =new String[]{
"FC,Milan"
,"FC,Inter"
,"FC,Roma"
,"FC,Lazzio"
};
3 提示信息的设置
要显示的数据与控件之间不能直接关联,要通过适配器(Adapter)作为中介,才能将数据和控件关联起来。对于今天所涉及到的例子,使用集合适配器类(ArrayAdapter)即可实现,所以首先要定义一个集合适配器。
3.1 集合适配器的定义
ArrayAdapter类表示集合适配器,派生自BaseAdapter类。它可以通过泛型来指定要适配的数据类型,然后在构造函数中把要适配的数据传入即可。该类的全称叫做
android.widget.ArrayAdapter<T>
其中,android.widget是ArrayAdapter类所在的包;<T>表示泛型,可以将T设置为String等类型。ArrayAdapter类的构造函数的格式有多个,其中一个是
public ArrayAdapter (Context context,int resource, T[] objects)
其中,context表示当前的上下文;resource指定了使用android内置的哪个控件来实例化AutoCompleteTextView控件;objects是在AutoCompleteTextView控件中要显示的数据。
在MainActivity类的重载方法onCreate中,调用ArrayAdapter类的构造函数定义一个泛型为String的集合适配器,如下代码所示。
ArrayAdapter<String> aa_teams =new ArrayAdapter<String>(
this
,android.R.layout.simple_dropdown_item_1line
, teams);
其中,this表示MainActivity类的上下文;android.R.layout.simple_dropdown_item_1line是一个自带的AutoCompleteTextView的ID,用它来实例化AutoCompleteTextView控件;teams是String的集合。
3.2 控件适配器的设置
3.2.1 获取AutoCompleteTextView控件
通过findViewById()方法获取AutoCompleteTextView控件,如下所示:
AutoCompleteTextView actv_teams =(AutoCompleteTextView)findViewById(R.id.auto);
其中,R.id.auto是在界面布局文件中添加的AutoCompleteTextView控件的ID。
3.2.2 设置AutoCompleteTextView控件的适配器
通过AutoCompleteTextView类的setAdapter()方法设置其适配器,如下所示:
actv_teams.setAdapter(aa_teams);
其中,actv_teams是3.2.1中获取到的AutoCompleteTextView控件;aa_teams是3.1中定义的集合适配器。
4 小结
今天学习了AutoCompleteTextView控件的使用方法。该控件主要的功能是根据用户部分输入,显示完整信息列表,供用户选择。AutoCompleteTextView控件与显示信息的关联是通过集合适配器实现的。集合适配器是一个泛型适配器,通过ArrayAdapter类的构造函数定义集合适配器,通过AutoCompleteTextView类的setAdapter()方法设置控件的适配器。