在设计app的输入界面时,假如假如智能提示,给用户带来的不只是方便,有时候还会是惊喜。通过实践研究,发现要实现android的个性化智能提示,实在非难事。
在Android中提供了两种智能输入框控件分是:MultiAutoCompleteTextView 和 AutoCompleteTextView 。
MultiAutoCompleteTextView 继承自AutoCompleteTextView
的
可编辑的文本视图,能够对用户键入的文本进行有效地扩充提示,而不需要用户输入整个内容。(用户输入一部分内容,剩下的部分系统就会给予提示)。用户必须提供一个 MultiAutoCompleteTextView.Tokenizer
用来区分不同的子串。
使用方法如下:
MultiAutoCompleteTextView m_mutil = (MultiAutoCompleteTextView) findViewById(R.id.m_autobyname);
m_mutil.setAdapter(adapter);
m_mutil.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer()); //用户正在输入时,tokenizer设置用于确定文本相关范围内
既然 MultiAutoCompleteTextView 是 AutoCompleteTextView 的子类,那么MultiAutoCompleteTextView 的基本功能,我们都可以通过定制AutoCompleteTextView来实现了。
AutoCompleteTextView 基本使用方法如下:
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line, autoString); //autoString为一静态的字符数组
AutoCompleteTextView m_auto =(AutoCompleteTextView) findViewById(R.id.antobyname);
m_auto.setAdapter(adapter); //为智能输入框设置适配器
m_auto.setThreshold(1); //更改触发提示的字符长度,default=2
熟悉android列表开发的话,对于Adapter应该非常熟悉,上面的实例代码,使用了android提供的ArrayAdapter,给予AutoCompleteTextView 绑定数据与视图,我们要定制,首先从这里开始。
和其他Adaper一样,ArrayAdapter的基类也是BaseAdapter,我们可以定制自己的Adapter了。
可是一运行,木有反应,没有一点提示?
的确,我们的视图与数据是绑定了,可是AutoCompleteTextView 却不能根据我们的Adapter获取到合适的数据,因为adapter不符合要求!
我们反过来再研究一下ArrayAdapter,它除了是BaseAdapter的子类,它还实现了 Filterable 接口!
我们在AutoAdapter中,实现该接口,并返回一个自定义的 Filter
那个AutoMailFilter又是一个什么样子的类呢?
先细细想想 AutoCompleteTextView 是怎样工作的,对,它只是对我们所输入的一些字符,进行过滤、索引,并组成相应的视图反馈给我们的用户,以提高我们的输入效率!
那接下来就是构建核心过滤器的时候了,AutoCompleteTextView 只会接收过滤后的数据,所以我们的数据源会多出一份拷贝,一份是原始的,一份则是过滤后的:
在AutoMailFilter里面,由于继承了,我们必须实现两个重要的方法:
protected FilterResults performFiltering(CharSequence prefix)
在这个方法里面定制过滤策略,根据输入的prefix对数据进行过滤,并组装成FilterResults 结果返回;
protected void publishResults(CharSequence constraint, FilterResults results)
这个方法则是发布结果用的,把上面方法的结果按照一定的要求进行处理后,通知Adapter进行数据视图的刷新
总结:
按照 AutoCompleteTextView 的工作流程,它依赖两个组件,Adapter 和 Filter,一个是视图的处理,一个是数据过滤处理,对这两个组件进行深度定制,我们就可以随心所欲了。
- 大小: 20.9 KB
- 大小: 3 KB
- 大小: 2.9 KB
分享到:
相关推荐
Android开发(30)--AutoCompleteTextView和----MultiAutoCompleteTextView自动提示输入内容
Android自定义AutoCompleteTextView
扩展Android系统自带的AutoCompleteTextView控件,逐字提示,支持自定义类对象指定显示字段
实现工具Android studio,一般AutoCompleteTextView提示语列表的适配器只能系统提供的ArrayAdapter等,这里自定义适配器继承了BaseAdapter。
AutoCompleteTextView大多是采用ArrayAdapter进行适配的,这种有时候并不能满足我们的需求,所以就有了这个demo
Android基础教程(八)之仿百度谷歌搜索自动提示框-----AutoCompleteTextView的应用
两个AutoCompleteTextView学习例子,仅供参考!
android API中的 AutoCompleteTextView组件只能匹配过滤纯英文或者纯汉字的 经过改进后可以输入 汉字拼音匹配汉字 类似于百度搜索 例如输入x 会匹配“迅雷”“迅速” 如果输入s 也可以匹配 “迅速”
Android 学习笔记(十四):Activity-AutoCompleteTextView
autoCompleteTextView自定义BaseAdapter,实现下拉单的自定义样式,用sqlite数据库存放历史记录,进行写入时提示。点击某个下拉单写入autoCompleeTextView中。
NULL 博文链接:https://zymic.iteye.com/blog/743538
Smarty Streets AutoCompleteTextView Gradle库。 Android AutoCompleteTextView,它接收并显示来自SmartyStreets的美国地址建议。 不提供地址建议,仅提供地址验证和邮政编码查找。 演示版 是的,有一个演示应用...
Android AutoCompleteTextView自动提示输入。我博客网址: http://blog.csdn.net/qq_16064871。我写了很多博客都是有源码的,请多多关注。
AutoCompleteTextView自动提示输入文字信息,结合listview使用
AutoCompleteTextView 自动提示联系人信息 还可以手动从通讯录选择联系人 选择完联系人,自动去除光标。
NULL 博文链接:https://renpeng301.iteye.com/blog/1142199
AutoCompleteTextView具有输入提示的功能,但是它的这种提示不适合对股票列表的过滤,如果你玩过股票软件,就会知道只要输入股票名称的首字母或股票代码就会出现符合匹配的股票,这种过滤怎么实现呢? 还有个问题,...
|--AutoCompleteTextView自动提示的用法 |--BitMap、Drawable、inputStream及byte[] 互转 |--ContentProvider内容提供者定义 |--DatePicker日期控件 |--desktop |--Dialog之位置的挪动与控制 |--Dialog实现无标提栏...
AutoCompleteTextView自动完成文字输入 连接:http://i.cnblogs.com/EditPosts.aspx?opt=1