自动完成文本框的功能和用法
自动完成文本框(AutoCompleteTextView)从EditText派生而出,实际上它也是一个文本编辑框,但它比普通编辑框多了一个功能;当用户输入一定字符之后,自动完成文本框会显示一个下拉菜单,供用户从中选择,当用户选择某个才菜单项之后,AutoCompleteTextView按用户选择自动填写该文本框。
使用AutoCompleteTextView很简单,只要为他设置一个Adapter,该Adapter封装了AutoCompleteTextView预设的提示文本。
AutoCompleteTextView还派生了一个子类:MultiAutoCompleteTextView,该子类的功能与AutoCompleteTextView基本相似,只是MultiAutoCompleteTextView允许输入多个提示项,多个提示项以分隔符分隔。MultiAutoCompleteTextView提供了setTokenizer()方法来设置分隔符。
下面的布局文件中包含了AutoCompleteTextView和MultiAutoCompleteTextView。布局文件代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <!-- 定义一个自动完成文本框,指定输入一个字符后进行提示 --> <AutoCompleteTextView android:id="@+id/auto" android:layout_width="fill_parent" android:layout_height="wrap_content" android:completionHint="请选择您喜欢的图书:" android:dropDownHorizontalOffset="20dp" android:completionThreshold="1" /> <!-- 定义一个MultiAutoCompleteTextView组件 --> <MultiAutoCompleteTextView android:id="@+id/mauto" android:layout_width="fill_parent" android:layout_height="wrap_content" android:completionThreshold="1"/> </LinearLayout>
上面的布局文件中定义了AutoCompleteTextView和MultiAutoCompleteTextView,接下来在程序中为他们绑定同一个Adapter,这意味着两个自动完成文本框的提示项完全相同,只是他们的表现行为略有差异。
Adapter负责为它提示提示文本。主程序如下:
package org.crazyit.helloworld; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.widget.*; public class AutoCompleteTextViewTest extends Activity { AutoCompleteTextView actv; MultiAutoCompleteTextView mauto; //定义字符串数组,作为提示的文本 String[] books=new String[]{"疯狂Java讲义", "疯狂Ajax讲义", "疯狂XML讲义", "疯狂Workflow讲义"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.auto_complete_text_view_test); //创建一个ArrayAdapter,封装数组 ArrayAdapter<String> aa=new ArrayAdapter<String>(this ,android.R.layout.simple_dropdown_item_1line,books); actv=(AutoCompleteTextView)findViewById(R.id.auto); //设置Adapter actv.setAdapter(aa); mauto=(MultiAutoCompleteTextView)findViewById(R.id.mauto); //设置Adapter mauto.setAdapter(aa); //为MultiAutoCompleteTextView设置分隔符 mauto.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer()); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.auto_complete_text_view_test, menu); return true; } }
上面的程序中粗体字代码负责为AutoCompleteTextView、MultiAutoCompleteTextView设置同一个Adapter,并为MultiAutoCompleteTextView设置了分隔符。
运行上面的Activity程序得如下效果: