欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android TextWatcher三個回調以及監(jiān)聽EditText的輸入案例詳解

 更新時間:2021年08月30日 10:14:35   作者:LittleFogCat  
這篇文章主要介紹了Android TextWatcher三個回調以及監(jiān)聽EditText的輸入案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下

TextWatcher是一個監(jiān)聽字符變化的類。當我們調用EditText的addTextChangedListener(TextWatcher)方法之后,就可以監(jiān)聽EditText的輸入了。
在new出一個TextWatcher之后,我們需要實現三個抽象方法:

  • beforeTextChanged
  • onTextChanged
  • afterTextChanged

看下beforeTextChanged的注釋:

This method is called to notify you that, within s, the count characters beginning at start are about to be replaced by new text with length after. It is an error to attempt to make changes to s from this callback.

不知道你看懂沒有,可能是因為英文水平的問題,我反正是看的很含糊不清。
既然這樣,那最好的辦法就是自己打個log試一下了。

    EditText et = (EditText) findViewById(R.id.et);
    TextWatcher watcher = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            Log.d(TAG, "beforeTextChanged: s = " + s + ", start = " + start +
                    ", count = " + count + ", after = " + after);
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            Log.d(TAG, "onTextChanged: s = " + s + ", start = " + start +
                    ", before = " + before + ", count = " + count);
        }

        @Override
        public void afterTextChanged(Editable s) {
            Log.d(TAG, "afterTextChanged: " + s);
        }
    };
    et.addTextChangedListener(watcher);

首先輸入abc123

然后在c和1之間添加一個0,現在文字變成了abc0123,再看下LOGCAT的顯示:

再把0給刪掉,log如下:

把0替換成12:

通過Log,結合Android源碼注釋,可以得出結論:

  • beforeTextChanged(CharSequence s, int start, int count, int after)
    s: 修改之前的文字。
    start: 字符串中即將發(fā)生修改的位置。
    count: 字符串中即將被修改的文字的長度。如果是新增的話則為0。
    after: 被修改的文字修改之后的長度。如果是刪除的話則為0。
  • onTextChanged(CharSequence s, int start, int before, int count)
    s: 改變后的字符串
    start: 有變動的字符串的序號
    before: 被改變的字符串長度,如果是新增則為0。
    count: 添加的字符串長度,如果是刪除則為0。
  • afterTextChanged(Editable s)
    s: 修改后的文字

Tips:

**需要特別注意的是,在TextWatcher中setText要小心不要陷入死循環(huán)。**即:
文字改變->watcher接收到通知->setText->文字改變->watcher接受到通知->…
在watcher中使用setText的解決方案

關于這三個回調方法調用的時機,可以參考這篇文章

當對EditText使用setText之后,記得再使用setSelection()來設置光標位置。

一個完整的TextWatcher例子:

    // 用于屏蔽空格輸入的TextWatcher
    TextWatcher watcher = new TextWatcher() {
        private String mBefore;// 用于記錄變化前的文字
        private int mCursor;// 用于記錄變化時光標的位置

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            mBefore = s.toString();
            mCursor = start;
            Log.d(TAG, "beforeTextChanged: " + s + ", " + mCursor);
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            Log.d(TAG, "onTextChanged: " + s);
        }

        @Override
        public void afterTextChanged(Editable s) {
            Log.d(TAG, "afterTextChanged: " + s);
            // 這里圖方便,是在afterTextChanged判斷是否輸入之后含有空格,并不是最好的方案
            // 理論上應該在onTextChanged中判斷輸入內容
            if (s.toString().contains(" ")) {
                Log.i(TAG, "onTextChanged: 包含空格, 設置" + mBefore);
                et.removeTextChangedListener(this);
                et.setText(mBefore);
                et.addTextChangedListener(this);
                et.setSelection(mCursor);
            }
        }
    };
    et.addTextChangedListener(watcher);

到此這篇關于Android TextWatcher三個回調以及監(jiān)聽EditText的輸入案例詳解的文章就介紹到這了,更多相關Android TextWatcher三個回調以及監(jiān)聽EditText的輸入內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Android Studio升級到3.0 Terminal 中文顯示異常解決

    Android Studio升級到3.0 Terminal 中文顯示異常解決

    本篇文章主要介紹了Android Studio升級到3.0 Terminal 中文顯示異常解決,非常具有實用價值,需要的朋友可以參考下
    2017-10-10
  • 建造者模式_動力節(jié)點Java學院整理

    建造者模式_動力節(jié)點Java學院整理

    建造者實現抽象類的所有未實現的方法,具體來說一般是兩項任務,組建產品;返回組建好的產品
    2017-08-08
  • Android基于wheelView實現自定義日期選擇器

    Android基于wheelView實現自定義日期選擇器

    這篇文章主要為大家詳細介紹了Android基于wheelView實現自定義日期選擇器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • android獲取當前手機號示例程序

    android獲取當前手機號示例程序

    這篇文章主要介紹了android如何獲取當前手機號的方法,大家參考使用吧
    2013-11-11
  • Android跑馬燈MarqueeView源碼解析

    Android跑馬燈MarqueeView源碼解析

    這篇文章主要為大家詳細介紹了Android跑馬燈MarqueeView源碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Android實現EditText輸入金額

    Android實現EditText輸入金額

    EditText是Android中一個非常實用的控件,有很多InputType,可以來達到不同的輸入效果,下面通過實例代碼給大家解析android實現edittext輸入金額,需要的朋友參考下吧
    2016-12-12
  • Android制作一個錨點定位的ScrollView

    Android制作一個錨點定位的ScrollView

    這篇文章主要介紹了Android制作一個錨點定位的ScrollView,幫助大家更好的理解和學習使用Android,感興趣的朋友可以了解下
    2021-04-04
  • Android 類似微信登錄輸入框效果

    Android 類似微信登錄輸入框效果

    這篇文章主要介紹了Android 類似微信登錄輸入框效果,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-05-05
  • andriod如何搭建自己的輪詢框架

    andriod如何搭建自己的輪詢框架

    很多時候Android應用需要每間隔一段時間向服務器請求數據,如果服務器數據有更新則通知界面變化。Android中最常用的紅點一般采用的就是輪詢,本文主要介紹了Android如何搭建自己的輪詢框架,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Flutter?+?Idea?環(huán)境搭建及配置教程

    Flutter?+?Idea?環(huán)境搭建及配置教程

    本文主要總結我實際搭建的過程,最后發(fā)現不一定按網上那些博客或者官方文檔寫的來也可以搭建成功,在這里小編給大家分享下Flutter?+?Idea?環(huán)境搭建及配置教程,感興趣的朋友參考下吧
    2021-12-12

最新評論