天天看點

EditText輸入事件截獲與監聽

 本節介紹一下edittext中進行文字截獲和事件監聽。 

  預期目标:如下圖,輸入框中每輸入一個字元,下面的textview可以迅速的顯示出來輸入框中的内容  

EditText輸入事件截獲與監聽

  1.第一種實作方法:使用setonkeylistener(),不過這種方式隻能監聽硬鍵盤事件 

java代碼  

EditText輸入事件截獲與監聽

edittext.setonkeylistener(new view.onkeylistener() {              

        @override  

        public boolean onkey(view v, int keycode, keyevent event) {  

            textview.settext(edittext.gettext());  

            return false;  

        }  

    });  

2.使用textwatcher類,這種方式是可以監聽軟鍵盤和硬鍵盤的,我們隻需要實作ontextchanged方法即可,另外textwatcher還提供了beforetextchanged和aftertextchanged方法,用于更加詳細的輸入監聽處理 

EditText輸入事件截獲與監聽

edittext.addtextchangedlistener(new textwatcher() {           

            @override  

            public void ontextchanged(charsequence s, int start, int before, int count) {  

                textview.settext(edittext.gettext());  

            }  

            public void beforetextchanged(charsequence s, int start, int count,  

                    int after) {                  

            public void aftertextchanged(editable s) {                                

        });  

3、代碼片段:實作當輸入到最大值時則不允許再輸入了,另外,由于edittext并沒有提供給我們edittext的禁止輸入功能,以下方法也實作了此功能。 

EditText輸入事件截獲與監聽

private void seteditable(edittext medit, int maxlength, boolean value) {  

        if (value) {  

            medit.setfilters(new inputfilter[] { new myeditfilter(maxlength) });  

            medit.setcursorvisible(true);  

            medit.setfocusableintouchmode(true);  

            medit.requestfocus();  

        } else {  

            medit.setfilters(new inputfilter[] { new inputfilter() {  

                @override  

                public charsequence filter(charsequence source, int start,  

                        int end, spanned dest, int dstart, int dend) {  

                    return source.length() < 1 ? dest.subsequence(dstart, dend)  

                            : "";  

                }  

            } });  

            medit.setcursorvisible(false);  

            medit.setfocusableintouchmode(false);  

            medit.clearfocus();  

    }