效果圖
實現思路
這個功能首先想到的是安卓原生控件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寫的很詳細了,大家多多學習,多看安卓的源碼,會有意想不到的收穫!