自动完成文本框(AutoCompleteTextView)从EditText派生而出,功能:当用户输入一定字符以后,自动完成文本框会显示一个下拉菜单,供用户选择。
使用AutoCompleteTextView,要为它设置一个Adapter,该Adapter封装了AutoCompleteTextView预设的提示文本。
AutoCompleteTextView还派生了一个子类:MultiAutoCompleteTextView。区别:MultiAutoCompleteTextView允许输入多个提示项,多个提示项以分隔符分隔。用setTokenizer方法来设置分隔符。
AutoCompleteTextView与MultiAutoCompleteTextView的区别:
AutoCompleteTextView:
支持基本的自动完成功能,适用在各种搜索功能中,并且可以根据自己的需求设置他的默认显示数据。
MultiAutoCompleteTextView:
该控件可支持选择多个值(在多次输入的情况下),分别用分隔符分开,并且在每个值选中的时候再次输入值时会自动去匹配。可用在发短信,发邮件时选择联系人这种类型当中。使用时需要执行设置分隔符方法。
java示例代码:
public class MainActivity extends Activity
{
AutoCompleteTextView actv;
MultiAutoCompleteTextView mauto;
// 定义字符串数组,作为提示的文本
String[] books = new String[]{
"变形金刚I",
"变形金刚II",
"X战警I",
"X战警II",
"侏罗纪公园",
"侏罗纪世界",
"金瓶梅I",
"金瓶梅II"
};
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 创建一个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());
}
}
布局xml示例代码:
<?xml version="1.0" encoding="utf-8"?>
<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="10dp"
android:completionThreshold="2"/> <!-- 输入2个字符会自动显示 -->
<!-- 定义一个MultiAutoCompleteTextView组件 -->
<MultiAutoCompleteTextView
android:id="@+id/mauto"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:completionThreshold="1"/> <!-- 输入1个字符会自动显示 -->
</LinearLayout>
显示效果: