1、AutoCompleteTextView继承EditView,实际上是一个文本编辑框,但是当用户输入一定字符后,会根据用户设定的一组字符串显示一个下拉菜单,供用户选择,当用户选择某个菜单项之后,会自动填写该文本框。
2、常用XML属性和方法如下:
completionHint/setCompletionHint(CharSequence):设置显示在下拉菜单中的提示内容
completionThreshold/setThreshold(int):设置用户至少输入几个字符才出现提示
dropDownHeight/setDropDownHeight(int):设置下拉菜单高度
dropDownHorizontalOffset:设置下拉菜单与文本框的水平距离,默认对齐
dropDownVerticalOffset:设置下拉菜单与文本框的垂直距离,默认紧跟文本框
dropDownWidth/setDropDownWidth(int):下拉菜单宽度
singleLine:单行显示
popupBackground/setDropDownBackgroundResource(int):下拉菜单背景
使用AutoCompleteTextView需要设置一个Adapter,封装了供选择的文本内容(关于Adapter后面会单独讲解)
MultiAutoCompleteTextView和AutoCompleteTextView相似,只是选择完一项之后可以继续选择,效果如下图4-2-1所示(第一行为AutoCompleteTextView,第二行为MultiAutoCompleteTextView):
图 4-2-1
本示例java代码如下:
package com.example.autocompletetextview;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.MultiAutoCompleteTextView;
public class MainActivity extends Activity
{
AutoCompleteTextView actv;
MultiAutoCompleteTextView mauto;
// 定义字符串数组,作为提示的文本
String[] books = new String[]{"abc","abcd","abcde"};
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 创建一个ArrayAdapter,封装数组
ArrayAdapter<String> aa = new ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_item_1line, books);
// 使用xml数据源代替String数组
/*
* ArrayAdapter aa = ArrayAdapter.createFromResource(this, R.array.strList, android.R.layout.simple_dropdown_item_1line);
* aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
*/
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="match_parent"
android:layout_height="match_parent">
<!-- 定义一个自动完成文本框,指定输入一个字符后进行提示 -->
<AutoCompleteTextView
android:id="@+id/auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:dropDownHorizontalOffset="10dp"
android:completionThreshold="1"/>
<!-- 定义一个MultiAutoCompleteTextView组件 -->
<MultiAutoCompleteTextView
android:id="@+id/mauto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:completionThreshold="1"/>
</LinearLayout>
3、使用XML为数据源代替java代码中的字符串数组
在string.xml中添加如下string-array:
<string-array name="strList">
<item>abc</item>
<item>abcd</item>
<item>abcde</item>
</string-array>
显示效果和使用String数组作为数据源一样,实现代码见java代码中注释部分