Android仿QQ,网易邮箱客户端收件人控件
效果图
实现思路
这个功能首先想到的是安卓原生控件AutoCompleteTextView和MultiAutoCompleteTextView 前者用的还是比较多的,比如字符联想,最近搜索记录等用的都是前者比较多,后者要着重说下了,它是AutoCompleteTextView的升级版,主要区别是AutoCompleteTextView输入时只能提示一次(这个多次提示可能也可以通过自定义来实现,这里只说原生的对比),而MultiAutoCompleteTextView 中可以通过分隔符比如系统默认的英文逗号分隔符,空格等来实现输入时的多次提示,就是我们图上所示的多次提示功能,是不是很方便哪,这个控件确实很赞,之前没写这块,都不知道有这个原生的控件
因为我在做邮箱的功能,所以我下载了Android的系统邮箱源码
private MultiAutoCompleteTextView mToView; private MultiAutoCompleteTextView mCcView; private MultiAutoCompleteTextView mBccView;
可以看到,这是Android4.2的邮箱源码,用的都是原生的MultiAutoCompleteTextView,这三个分别是收件人,抄送,密送控件
mToView.setTokenizer(new Rfc822Tokenizer()); mToView.setValidator(addressValidator); mCcView.setTokenizer(new Rfc822Tokenizer()); mCcView.setValidator(addressValidator); mBccView.setTokenizer(new Rfc822Tokenizer()); mBccView.setValidator(addressValidator);上面这个setTokenizer就是设置分隔符了,这个很关键,设置的分隔符,用来区别输入完成和下次输入的再次提示,所以很重要,setValidator就是验证输入的是否是邮箱,不是的话,给予用户错误提示,让其更改.
上面的基本上就是MultiAutoCompleteTextView最基本的操作和配置了,设置完MultiAutoCompleteTextView数据源,即下拉框中的提示数据,就基本完成了最简单的多次提示了。
下面我要说的是为这个多次提示加上样式,即是题目上所说的仿qq,网易输入框的样式,这里我在看android的源码时发现了一个牛逼的开源控件,这个控件其实就是继承自MultiAutoCompleteTextView实现的多样式,可扩展性很强的一个控件,已经有强大的轮子了,咱们就别造了,关键项目紧张,来不及造,造出来估计bug也会很多,废话不多说
/** * Gmail style auto complete view with easy token customization * override getViewForObject to provide your token view * <br> * Created by mgod on 9/12/13. * * @author mgod */ public abstract class TokenCompleteTextView<T> extends MultiAutoCompleteTextView implements TextView.OnEditorActionListener { //Logging public static final String TAG = "TokenAutoComplete";
这个就是android源码中最新使用的控件,我估计qq,网易也是用的这个开源控件,确实很强大,扩展性特别好,传入一个自定义的对象,根据咱们的业务自己来定义吧,样式等都可以修改,我已经接入了这个控件,确实好用,所以关键代码就不贴了,下面给大家个链接吧
https://github.com/splitwise/TokenAutoComplete
这个demo写的很详细了,大家多多学习,多看安卓的源码,会有意想不到的收获!