#android #keylistener #keyevent
#Android #keylistener #keyevent
Вопрос:
Я пытаюсь определить, какая клавиша нажата в TextInputEditText (из Material Design), и хотя я нажимаю любую клавишу с клавиатуры, мне не удается перейти в метод OnKey. Может ли кто-нибудь мне помочь?
txtInputApo.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
Log.i("onKey","true");
if(event.getAction() == KeyEvent.ACTION_UP){
switch (keyCode){
case KeyEvent.KEYCODE_SPACE:
String Espaces = txtInputApo.getText().toString().replaceAll(" ", "");
txtInputApo.setText(Espaces);
txtInputApo.setSelection(Espaces.length());
break;
}
}
return false;
}
});
Спасибо!
Ответ №1:
View.OnKeyListener
в основном был создан для аппаратного ввода. В большинстве случаев вместо этого лучше использовать a TextWatcher
для такого сценария (мониторинг и изменение пользовательского ввода).
Вы можете сделать что-то подобное, чтобы достичь желаемого результата с помощью TextWatcher
:
TextWatcher watcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
String editableString = s.toString();
if (editableString.contains(" ")) {
final String spaceFreeString = editableString.replaceAll(" ", "");
txtInputApo.setText(spaceFreeString);
txtInputApo.setSelection(spaceFreeString.length());
}
}
};
txtInputApo.addTextChangedListener(watcher);
Комментарии:
1. Спасибо! Я пробовал
TextWatcher
раньше, но мне также нужно захватить клавишу ввода, и я не знал, как это сделать. В любом случае, я думаю, что смогу справиться с этим решением. Спасибо!