2017-02-13 118 views
0

我一直在尝试捕获过去几个小时的Enter键,但我无法在侦听器中接听电话。我正在尝试提供“按Enter键发送”。但我总是注册OnKeyListener。几个键可以随机调用。Android无法在EditText上捕获Enter键

它不是重复的,因为所有答案都提供了相同的一组细节,这是一个标准代码。我使用Nexus 6P

我的代码:

public void onCreate(){ 
     //set press enter to save state 
     anEditText.setOnKeyListener(new View.OnKeyListener() { 
      @Override 
      public boolean onKey(View view, int keyCode, KeyEvent event) { 
       if(keyCode == 
         EditorInfo.IME_ACTION_SEND || event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN){ 
        if (new SharedPrefsManager(mContext).getBoolean(StringConstants.KEY_PRESS_ENTER_TO_SAVE, false)) { 
         Toast.makeText(mContext, "Enter pressed, to save", Toast.LENGTH_SHORT).show(); 
        } 
        return true; 
       } 
       return false; 
      } 
     }); 
} 

@OnCheckedChanged(R.id.check_enter_to_send) 
public void enterToSendChecBoxClicked(CompoundButton buttonView, boolean isChecked){ 
    // 1. set the preference 
    new SharedPrefsManager(mContext).putBoolean(StringConstants.KEY_PRESS_ENTER_TO_SAVE, isChecked); 
} 
+0

围绕'IME_ACTION_SEND'和'KEYCODE_ENTER'尝试括号有条件 –

+0

@ cricket_007我的onKey()本身没有被调用,所以问题不在逻辑中。 – Ichthyocentaurs

+0

看过这个吗? http://stackoverflow.com/a/4889059/2308683 –

回答

2

有处理软键盘上的键盘事件,只有硬件键盘的API。根据Handling Keyboard Actions

注意:当处理与该KeyEvent类和相关API的键盘事件,你应该预料到这样的键盘事件从硬件键盘只来了。您绝对不应该依靠软输入法(屏幕键盘)上的任何按键来接收按键事件。

+0

那么将是怎样的方式,实现一个TextWatcher? – Ichthyocentaurs

+0

@AkshatArora TextWatcher监听键入的字符串长度的变化,而不是构建字符串的按键。 –

+0

我知道,我可以检查三角洲以查看最后一个键是否为“\ n” – Ichthyocentaurs