我正在使用安卓系统。以前我用来onKeyListener
处理关键事件的特定操作。
但是,这种方式似乎并不能解决我的问题,因为一旦我为我的EditText
. 在阅读了 SO 中的一些主题之后,我知道我应该改用 TextWatcher,但我仍然想知道如何处理ENTER
内部的关键事件,因为提供的参数只有CharSequence
,Editable
等。我没有找到任何keyCode
参数。
我正在使用安卓系统。以前我用来onKeyListener
处理关键事件的特定操作。
但是,这种方式似乎并不能解决我的问题,因为一旦我为我的EditText
. 在阅读了 SO 中的一些主题之后,我知道我应该改用 TextWatcher,但我仍然想知道如何处理ENTER
内部的关键事件,因为提供的参数只有CharSequence
,Editable
等。我没有找到任何keyCode
参数。
试试这个
@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
}
}
试试这个
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
}
};
我认为这是更好的解决方案,因为您可以在 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());
}
}
});