在Android上忽略按键

时间:2015-09-25 10:13:44

标签: android keyevent

当我从0,1或2按下不同的键时忽略按键事件应该很容易,但是这段代码对我不起作用:

txtInput.setOnKeyListener(new EditText.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (keyCode==KeyEvent.KEYCODE_0 ||
                    keyCode==KeyEvent.KEYCODE_1 ||
                    keyCode==KeyEvent.KEYCODE_2 ) {
                return false;
            }else {
                return true;
            }
        }
    });

返回true应该是这样做的方法......出了什么问题?

1 个答案:

答案 0 :(得分:3)

试试这个,我想出来了,因为你制作了一个onKeyListener,默认回报是false,所以如果它是false并显示数字,那么就改变它到true,它不会;)

etpew.setOnKeyListener(new EditText.OnKeyListener() {

        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (keyCode==KeyEvent.KEYCODE_0 ||
                    keyCode==KeyEvent.KEYCODE_1 ||
                    keyCode==KeyEvent.KEYCODE_2 ) {
                Toast.makeText(MainActivity.this, "NO!", Toast.LENGTH_SHORT).show();
                return true;
            }else {
                return false;
            }
        }

    });

作为View.OnKeyListener Documentation says

  

<强>返回   如果侦听器已使用该事件,则为True,否则为false。

您也可以在EditText

中添加此内容
<EditText android:inputType="text" android:digits="3,4,5,6,7,8,9,*,qwertzuiopasdfghjklyxcvbnm" />

你也可以尝试这种方法,但第一种方法更好......你可以使用InputFilter,如下所示:

 etpew.setFilters(new InputFilter[]{
            new InputFilter() {
                public CharSequence filter(CharSequence src, int start,
                                           int end, Spanned dst, int dstart, int dend) {

                    if (src.toString().matches("[a-zA-Z3-9 ]*")) //I've removed the 0,1,2 but if you want to control more stuff just add on this method.
                    {
                        return src;
                    }
                    return "";
                }
            }
    });