Android EditText -TextWatch接口

TextWatcher接口解析

轉(zhuǎn)載至 http://www.picksomething.cn/?p=34

1.方法解析
??它有三個(gè)成員方法漫谷,第一個(gè)after很簡單攘已,這個(gè)方法就是在EditText內(nèi)容已經(jīng)改變之后調(diào)用幽纷,重點(diǎn)看下面兩個(gè)方法:


beforeTextChanged(CharSequence s, int start,int count,int after)

這個(gè)方法是在Text改變之前被調(diào)用沐寺,它的意思就是說在原有的文本s中牲览,從start開始的count個(gè)字符將會被一個(gè)新的長度為after的文本替換挠羔,注意這里是將被替換井仰,還沒有被替換。


onTextChanged(CharSequence s, int start,int before,int count)

這個(gè)方法是在Text改變過程中觸發(fā)調(diào)用的破加,它的意思就是說在原有的文本s中俱恶,從start開始的count個(gè)字符替換長度為before的舊文本,注意這里沒有將要之類的字眼范舀,也就是說一句執(zhí)行了替換動作合是。


可能說起來比較抽象,我舉個(gè)簡單的例子锭环,比如說我們監(jiān)聽一個(gè)EditText聪全,默認(rèn)開始的時(shí)候EditText中沒有文本,當(dāng)我們輸入LOVE四個(gè)字母的時(shí)候辅辩,在打印信息中我輸出各個(gè)參數(shù)看一下參數(shù)的變化难礼。

 10-18 16:40:21.528: D/Debug(4501): beforeTextChanged 被執(zhí)行----> s=----start=0----after=1----count=0
10-18 16:40:21.528: D/Debug(4501): onTextChanged 被執(zhí)行---->s=L----start=0----before=0----count=1
10-18 16:40:21.532: D/Debug(4501): afterTextChanged 被執(zhí)行---->L
10-18 16:40:29.304: D/Debug(4501): beforeTextChanged 被執(zhí)行----> s=L----start=1----after=1----count=0
10-18 16:40:29.308: D/Debug(4501): onTextChanged 被執(zhí)行---->s=LO----start=1----before=0----count=1
10-18 16:40:29.308: D/Debug(4501): afterTextChanged 被執(zhí)行---->LO
10-18 16:40:32.772: D/Debug(4501): beforeTextChanged 被執(zhí)行----> s=LO----start=2----after=1----count=0
10-18 16:40:32.772: D/Debug(4501): onTextChanged 被執(zhí)行---->s=LOV----start=2----before=0----count=1
10-18 16:40:32.776: D/Debug(4501): afterTextChanged 被執(zhí)行---->LOV
10-18 16:40:34.772: D/Debug(4501): beforeTextChanged 被執(zhí)行----> s=LOV----start=3----after=1----count=0
10-18 16:40:34.772: D/Debug(4501): onTextChanged 被執(zhí)行---->s=LOVE----start=3----before=0----count=1
10-18 16:40:34.776: D/Debug(4501): afterTextChanged 被執(zhí)行---->LOVE

通過上面的打印信息我們可以發(fā)現(xiàn)在輸入L之前beforeTextChanged被執(zhí)行,s為空玫锋,所以s輸入空蛾茉,start=0,也就是從位置0開始撩鹿,count=0谦炬,也就是0個(gè)字符將會被替換,after=1节沦,也就是說0個(gè)字符將會被一個(gè)新的長度為after=1的文本(也就是L)替換键思。


當(dāng)輸入發(fā)生改變的時(shí)候onTextChanged被執(zhí)行,此時(shí)s=L也就是輸入的字母L甫贯,從start=0開始吼鳞,count=1個(gè)字符替換了長度為before=0的舊文本。通俗點(diǎn)將就是字母L從位置0開始替換了原來的空文本获搏,下面的就可以依次類推了赖条。那么我們?nèi)绾卫眠@個(gè)接口監(jiān)聽EditText的文本變化來實(shí)現(xiàn)限制輸入字?jǐn)?shù)的功能呢失乾,我相信大家都有自己的想法了,這里我給出自己的一個(gè)簡單實(shí)現(xiàn)纬乍,主要代碼如下:

    source_des.addTextChangedListener(newTextWatcher()
 {
     private CharSequence temp;
     private intselection Start;
     private ntselection End;
       @Override
   public void onTextChanged(CharSequence s,int start,int before,int count){
    Log.d(TAG,"onTextChanged 被執(zhí)行---->s="+ s +"----start="+ start+"----before="+before +"----count"+count); 
    temp = s;
   }
   public void before textChanged(CharSequence s,int start,int count,int after){
    Log.d(TAG,"beforeTextChanged 被執(zhí)行----> s="+ s+"----start="+ start+"----after="+after +"----count"+count);
   }
    public void afterTextChanged(Editable s){
    Log.d(TAG,"afterTextChanged 被執(zhí)行---->"+ s);
    selectionStart = source_des.getSelectionStart();
        selectionEnd = source_des.getSelectionEnd();if(temp.length() > MAX_LENGTH) {
            Toast.makeText(MainActivity.this,"只能輸入九個(gè)字",
            Toast.LENGTH_SHORT).show();
            s.delete(selectionStart -1, selectionEnd);inttempSelection = selectionEnd;
            source_des.setText(s);
            source_des.setSelection(tempSelection);
        }
    }
});

手機(jī)號加空格實(shí)例:http://wuxiaolong.me/2015/07/09/phone_space/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末碱茁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子仿贬,更是在濱河造成了極大的恐慌纽竣,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茧泪,死亡現(xiàn)場離奇詭異蜓氨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)队伟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門穴吹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嗜侮,你說我怎么就攤上這事港令。” “怎么了锈颗?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵顷霹,是天一觀的道長。 經(jīng)常有香客問我击吱,道長淋淀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任覆醇,我火速辦了婚禮朵纷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘叫乌。我一直安慰自己柴罐,他們只是感情好徽缚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布憨奸。 她就那樣靜靜地躺著,像睡著了一般凿试。 火紅的嫁衣襯著肌膚如雪排宰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天那婉,我揣著相機(jī)與錄音板甘,去河邊找鬼。 笑死详炬,一個(gè)胖子當(dāng)著我的面吹牛盐类,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼在跳,長吁一口氣:“原來是場噩夢啊……” “哼枪萄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起猫妙,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤瓷翻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后割坠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體齐帚,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年彼哼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了对妄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡敢朱,死狀恐怖饥伊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蔫饰,我是刑警寧澤琅豆,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站篓吁,受9級特大地震影響茫因,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜杖剪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一冻押、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盛嘿,春花似錦洛巢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至芥炭,卻和暖如春漓库,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背园蝠。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工渺蒿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人彪薛。 一個(gè)月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓茂装,卻偏偏與公主長得像怠蹂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子少态,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程褥蚯,因...
    小菜c閱讀 6,424評論 0 17
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)况增,斷路器赞庶,智...
    卡卡羅2017閱讀 134,659評論 18 139
  • 《裕語言》速成開發(fā)手冊3.0 官方用戶交流:iApp開發(fā)交流(1) 239547050iApp開發(fā)交流(2) 10...
    葉染柒丶閱讀 26,813評論 5 19
  • 今日有幸得友人相邀觀看《竇娥奇冤》電影歧强,觀看之際尚未有頗多感慨,事后思之为肮,頗覺不錯(cuò)摊册。"地啊颊艳!你不分好歹何為地茅特,天啊...
    秋蘭江離閱讀 481評論 0 0