MultiAutoCompleteTextView

可支持选择多个值(在多次输入的情况下),分别用分隔符分开,并且在每个值选中的时候再次输入值时会自动去匹配

可用在发短信,发邮件时选择联系人这种类型当中。

使用时需要执行设置分隔符方法

 

AutoCompleteTextView

支持基本的自动完成功能,适用在各种搜索功能中,并且可以根据自己的需求设置他的默认显示数据

 

两个控件都可以很灵活的预置匹配的那些数据,并且可以设置输入多少值时开始匹配等等功能

 

效果图

 

示例:

主布局文件

multi_textview.xml

 

Xml代码 复制代码 收藏代码
  1. <MultiAutoCompleteTextView  
  2.         android:layout_height="wrap_content" android:layout_width="fill_parent"  
  3.         android:id="@+id/multi_txt"></MultiAutoCompleteTextView>  
  4.     <AutoCompleteTextView  
  5.         android:layout_height="wrap_content" android:layout_width="fill_parent"  
  6.         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

 

Xml代码 复制代码 收藏代码
  1. <TextView android:id="@+id/subject"  
  2.     xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent" android:layout_height="30px"  
  4.     android:singleLine="true"    
  5.     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

 

Xml代码 复制代码 收藏代码
  1. <resources>  
  2.     <string-array name="mutilstring">  
  3.         <item>test1</item>  
  4.         <item>test2</item>  
  5.         <item>test3</item>  
  6.     </string-array>  
  7. </resources>  
<resources>
    <string-array name="mutilstring">
        <item>test1</item>
        <item>test2</item>
        <item>test3</item>
    </string-array>
</resources>

 

 

 

执行数据绑定

 

Java代码 复制代码 收藏代码
  1. //数据适配准备   
  2. ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,   
  3.         R.layout.multi_item, getResources().getStringArray(   
  4.                 R.array.mutilstring));   
  5.   
  6. //多匹配的自动完成   
  7. MultiAutoCompleteTextView mtxt = (MultiAutoCompleteTextView) findViewById(R.id.multi_txt);   
  8. //设置适配   
  9. mtxt.setAdapter(adapter);   
  10. // 设置输入多少字符时自动匹配   
  11. mtxt.setThreshold(2);   
  12. // 设置分隔符   
  13. mtxt.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());   
  14.   
  15. //单一的自动完成   
  16. AutoCompleteTextView auto_txt = (AutoCompleteTextView) findViewById(R.id.auto_txt);   
  17. 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          下拉列表里的选中项

posted on 2012-05-21 14:12  清沁  阅读(376)  评论(0编辑  收藏  举报