例如做了一下设置,MultiAutoCompleteTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
那么当你输入 “It” 时,它会提示你Italy, 然后你选择这个字符串。此时在textview中的字符串为 "Italy", 紧接着再输入",It", 此时字符串为在textview中位 “Italy,It”,那么此时MultiAutoCompleteTextView根据你设置的分词方式(CommaTokenizer),分解出 "It",然后再匹配一次, 又会提示Italy.这就是Multi的由来。支持多个单词的提示,当然必须设置正确的分词方式(Tokenizer)。
一、AutoCompleteTextView
1、简介
一个继承自EditView
的
可编辑的文本视图,能够实现动态匹配输入的内容。如google搜索引擎当输入文本时可以根据内容显示匹配的热门信息。
2、重要方法
clearListSelection():清除选中的列表项
dismissDropDown():如果存在关闭下拉菜单
getAdapter():获取适配器
二、MultiAutoCompleteTextView
1、简介
一个继承自AutoCompleteTextView
的
可编辑的文本视图,能够对用户键入的文本进行有效地扩充提示,而不需要用户输入整个内容。(用户输入一部分内容,剩下的部分系统就会给予提示)。
用户必须提供一个MultiAutoCompleteTextView.Tokenizer
用来区分不同的子串。
2、重要方法
enoughToFilter():当文本长度超过阈值时过滤
performValidation():代替验证整个文本,这个子类方法验证每个单独的文字标记
setTokenizer(MultiAutoCompleteTextView.Tokenizer t):用户正在输入时,tokenizer设置将用于确定文本相关范围内
以下为案例
main.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/autoCompleteTextView" android:layout_width="fill_parent" android:layout_height="wrap_content"/> <MultiAutoCompleteTextView android:id="@+id/multiAutoCompleteTextView" android:layout_width="fill_parent" android:layout_height="wrap_content"/> </LinearLayout>
TextViewActivity类
package com.ljq.activity; import android.app.Activity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; import android.widget.MultiAutoCompleteTextView; public class TextViewActivity extends Activity { //福建九地市 private static final String[] cities=new String[] {"FuZhou", "XiaMen", "NiDe", "PuTian","QuanZhou", "ZhangZhou", "LongYan", "SanMing","NanPing"}; private AutoCompleteTextView autoCompleteTextView=null; private MultiAutoCompleteTextView multiAutoCompleteTextView=null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); autoCompleteTextView=(AutoCompleteTextView)findViewById(R.id.autoCompleteTextView); multiAutoCompleteTextView=(MultiAutoCompleteTextView)findViewById(R.id.multiAutoCompleteTextView); //创建适配器 ArrayAdapter<String> adapter=new ArrayAdapter<String>( this, android.R.layout.simple_dropdown_item_1line, cities); autoCompleteTextView.setAdapter(adapter); //设置输入多少字符后提示,默认值为2 autoCompleteTextView.setThreshold(2); multiAutoCompleteTextView.setAdapter(adapter); multiAutoCompleteTextView.setThreshold(2); //用户必须提供一个MultiAutoCompleteTextView.Tokenizer用来区分不同的子串。 multiAutoCompleteTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer()); } }
运行结果
/
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>
数据适配布局文件
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" />
资源文件
string.xml
- <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);