Android仿QQ,网易邮箱客户端收件人控件

效果图


 


实现思路


 这个功能首先想到的是安卓原生控件AutoCompleteTextViewMultiAutoCompleteTextView 前者用的还是比较多的,比如字符联想,最近搜索记录等用的都是前者比较多,后者要着重说下了,它是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写的很详细了,大家多多学习,多看安卓的源码,会有意想不到的收获!




发布了60 篇原创文章 · 获赞 109 · 访问量 36万+

猜你喜欢

转载自blog.csdn.net/shenshibaoma/article/details/72419804