如何在Android上使用TextWatcher处理Enter键

我正在使用Android。 以前我用onKeyListener来处理关键事件的特定操作。

然而,这种方式似乎不能解决我的问题,因为几乎所有的关键将获得禁用一旦我已经实现了侦听器到我的EditText 。 在阅读了一些主题后,我知道我应该使用TextWatcher代替,但我仍然想知道如何处理ENTER键内部,因为提供的参数只有CharSequenceEditable等,我没有find任何keyCode参数。

Solutions Collecting From Web of "如何在Android上使用TextWatcher处理Enter键"

尝试这个

 protected View.OnKeyListener onEnter = new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) { //here do what you want } return false; // very important } }; 

尝试这个

 @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (s.length()>0 && s.subSequence(s.length()-1, s.length()).toString().equalsIgnoreCase("\n")) { //enter pressed } } 

我认为这是更好的解决scheme,因为您可以在EditText字段的任意位置按“Enter”,而不仅仅是在行尾。

  edittext.addTextChangedListener(new TextWatcher() { public void afterTextChanged(Editable s) { } public void beforeTextChanged(CharSequence s, int st, int ct, int af) { } public void onTextChanged(CharSequence s, int start, int before, int count) { if (s.length() < 1 || start >= s.length() || start < 0) return; // If it was Enter if (s.subSequence(start, start + 1).toString().equalsIgnoreCase("\n")) { // Change text to show without '\n' String s_text = start > 0 ? s.subSequence(0, start).toString() : ""; s_text += start < s.length() ? s.subSequence(start + 1, s.length()).toString() : ""; edittext.setText(s_text); // Move cursor to the end of the line edittext.setSelection(s_text.length()); } } });