【问题标题】:Android soft keyboard letters not being detected未检测到 Android 软键盘字母
【发布时间】:2013-11-24 17:59:36
【问题描述】:

我的应用中有一个“edittext”,我想在软键盘上按下某些字符时执行一些操作。 我已经尝试了各种方式以及 stackOverflow 的建议方式,但是没有检测到字符,即 a/A、b/B 等。但是,Enter 和 Del 可以。 阅读负载后,显然我必须根据此处的示例覆盖edittext类,所以我已经这样做了。 我在这里覆盖了方法:

    @Override
    public boolean sendKeyEvent(KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_DOWN
                && event.getKeyCode() == KeyEvent.KEYCODE_A) {
            ZanyEditText.this.setRandomBackgroundColor();

            return false;
        }
        return super.sendKeyEvent(event);
    }

我也尝试过覆盖标准的edittext onKeyListener:

txtSMS.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                // You can identify which key pressed buy checking keyCode value
                // with KeyEvent.KEYCODE_
                if (keyCode == KeyEvent.KEYCODE_DEL) {
                    // this is for backspace
                    Toast.makeText(getApplicationContext(), "Del was pressed", Toast.LENGTH_SHORT).show();
                }
                if (keyCode == KeyEvent.KEYCODE_A) {
                    // this is for backspace
                    Toast.makeText(getApplicationContext(), "A was pressed", Toast.LENGTH_SHORT).show();
                }
                return false;
            }

然而,在这两种情况下,Del 上都曾被检测到。为什么我无法检测字母表的字符?它们出现在文本框中...

谢谢

【问题讨论】:

    标签: android android-edittext character detect onkeypress


    【解决方案1】:

    我遇到了类似的问题,您需要使用 TextWatcher,然后检测要输入的最后一个字符是什么(使用“subSequence”)。确定删除被按下或输入a的使用逻辑,希望这有帮助

    见下面的代码:

    editText.addTextChangedListener(new TextWatcher() {
    
            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
                // TODO Auto-generated method stub
                //this is the method that detects the last entry below
                String c = s.subSequence(before, before + 1).toString();
                //check for delete
                if (before < s.length()) {
                    String c = s.subSequence(before, before + 1).toString();
                    //see if a was entererd
                    if (c == a) {
                         //a entered
    
                    }
                } else {
                    //delete pressed
    
                }
    
            }
    
            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
    
            }
    
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub
    
            }
    
        });
    

    【讨论】:

      猜你喜欢
      • 2018-08-26
      • 2011-06-09
      • 1970-01-01
      • 2015-11-02
      • 1970-01-01
      • 2017-09-07
      • 1970-01-01
      • 2011-08-08
      • 2014-04-29
      相关资源
      最近更新 更多