MultiAutoCompleteTextView
可支持选择多个值(在多次输入的情况下),分别用分隔符分开,并且在每个值选中的时候再次输入值时会自动去匹配
可用在发短信,发邮件时选择联系人这种类型当中。
使用时需要执行设置分隔符方法
AutoCompleteTextView
支持基本的自动完成功能,适用在各种搜索功能中,并且可以根据自己的需求设置他的默认显示数据
两个控件都可以很灵活的预置匹配的那些数据,并且可以设置输入多少值时开始匹配等等功能
效果图
示例:
主布局文件
multi_textview.xml
- <MultiAutoCompleteTextView
- android:layout_height="wrap_content" android:layout_width="fill_parent"
- android:id="@+id/multi_txt"></MultiAutoCompleteTextView>
- <AutoCompleteTextView
- android:layout_height="wrap_content" android:layout_width="fill_parent"
- android:id="@+id/auto_txt"></AutoCompleteTextView>
<MultiAutoCompleteTextView android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/multi_txt"></MultiAutoCompleteTextView> <AutoCompleteTextView android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/auto_txt"></AutoCompleteTextView>
数据适配布局文件
multi_item.xml
- <TextView android:id="@+id/subject"
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent" android:layout_height="30px"
- android:singleLine="true"
- android:ellipsize="end" />
<TextView android:id="@+id/subject" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="30px" android:singleLine="true" android:ellipsize="end" />
资源文件
string.xml
- <resources>
- <string-array name="mutilstring">
- <item>test1</item>
- <item>test2</item>
- <item>test3</item>
- </string-array>
- </resources>
<resources> <string-array name="mutilstring"> <item>test1</item> <item>test2</item> <item>test3</item> </string-array> </resources>
执行数据绑定
- //数据适配准备
- ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
- R.layout.multi_item, getResources().getStringArray(
- R.array.mutilstring));
- //多匹配的自动完成
- MultiAutoCompleteTextView mtxt = (MultiAutoCompleteTextView) findViewById(R.id.multi_txt);
- //设置适配
- mtxt.setAdapter(adapter);
- // 设置输入多少字符时自动匹配
- mtxt.setThreshold(2);
- // 设置分隔符
- mtxt.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
- //单一的自动完成
- AutoCompleteTextView auto_txt = (AutoCompleteTextView) findViewById(R.id.auto_txt);
- auto_txt.setAdapter(adapter);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
**************************************************************************************
MultiAutoCompleteTextView补充
一、结构
public class MultiAutoCompleteTextView extends AutoCompleteTextView
java.lang.Object
android.view.View
android.widget.TextView
android.widget.EditText
android.widget.AutoCompleteTextView
android.widget.MultiAutoCompleteTextView
二、 类概述
一个继承自AutoCompleteTextView的可编辑的文本视图,能够对用户键入的文本进行有效地扩充提示,而不需要用户输入整个内容。(用户输入一部分内容,剩下的部分系统就会给予提示)。
用户必须提供一个MultiAutoCompleteTextView.Tokenizer以用来区分不同的子串。
下面的代码片段展示了如何创建一个文本视图,这个视图用来对用户输入的国家名称进行有效地补充提示。
三、公共方法
public boolean enoughToFilter ()
此方法并不是检验什么时候文本的总长度超过了预定的值,而是在仅当从函数findTokenStart()到getSelectionEnd()函数得到的文本长度为0或者超过了预定值的时候才起作用。(译者注:当文本长度超过阈值时过滤)
public void performValidation ()
此子类方法并不是用来确定整个文本的有效性,而是用来确定文本中的单个符号的有效性。空标记将被移除。
public void setTokenizer (MultiAutoCompleteTextView.Tokenizer t)
设置用来决定用户正在输入文本的范围的分词组件。
四、 受保护方法
protected void performFiltering (CharSequence text, int keyCode)
此方法并不过滤整个编辑框的内容,只是过滤从函数findTokenStart() 到函数getSelectionEnd()获得的长度为0或者超过了预定的值的文本内容。
参数
text 指定过滤模式
keyCode 插入到编辑框中的最后一个字符;当字符(文本)是通过软键盘输入的时候,小心此字符的值可能为NULL。
protected void performFiltering (CharSequence text, int start, int end, int keyCode)
启动对下拉式列表内容的过滤。过滤模式为编辑框中指定的范围。子类可覆盖此方法,以便于采用一个不同的模式。
protected void replaceText (CharSequence text)
通过替换从函数findTokenStart() 到函数 getSelectionEnd()得到的文本文本范围以及传递给函数terminateToken()的文版返回的结果来实现文本的输入。另外,文本的替换区域将会被标记为自动文本区,这样如果用户直接按DEL键,执行过程就会停止。子类可覆盖此方法来实现许多不同的文本插入工作。
参数
text 下拉列表里的选中项