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 篇原創文章 · 獲贊 110 · 訪問量 37萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章