天天看点

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();  

    }