基于Java语言的安卓编程之十五自动完成文本框

时间:2022-10-28 22:38:21


前一天学习了学习了表示控件尺寸时所使用的px、pt、dp和sp等单位。其中px表示像素,pt表示点,dp表示与密度无关的像素,sp表示放大因子像素。将pt、dp和sp转换px时,需要用到DisplayMetrics类的xdpi、density和scaleDensity等字段。

今天将学习自动完成文本框(AutoCompleteTextView)控件。该控件派生自EditText控件。当用户在自动完成文本框控件中输入信息时,该文本框会以下拉菜单的方式弹出用户要输入的信息,当在下拉菜单中选中某个信息后,该信息会在自动完成文本框控件中显示,如图1所示。

基于Java语言的安卓编程之十五自动完成文本框

图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()方法设置控件的适配器。