Как реализовать снятие фокуса с EditText по нажатию Enter на экранной клавиатуре
Имеется EditText. После ввода текста и нажатии Enter на экранной клавиатуре курсор просто переходит на новую строку, фокус остается на EditText, экранная клавиатура не исчезает. Вот код:
`scheduleName.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) {
v.clearFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
return true;
}
return false;
}
});`
Интересно то, что при нажатии на Enter не на экранной клавиатуре, а на ноутбуке, экранная клавиатура исчезает, но фокус по прежнему остается на EditText и курсор переходит на новую строку. Хотелось бы чтобы при нажатии enter именно на экранной клавиатуре введенный текст оставался, фокус с editText снимался и клавиатура исчезала. Заранее спасибо за помощь.
PS. Сделал следующее
public boolean onKey(View v, int keyCode, KeyEvent event) {
Log.d("keyCode", String.valueOf(keyCode));
Log.d("event", event.toString());
if (keyCode == KeyEvent.KEYCODE_ENTER) {
v.clearFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
return true;
}
return false;
}
Получается что когда нажимаешь мышкой на экранную клавиатуру эмулятора в android studio, то в лог ничего не выводится. А если нажимаешь enter на клавиатуре ноутбука то реакция есть:
2024-04-06 22:55:22.712 7674-7674 keyCode com.example.test1602242 D 66
2024-04-06 22:55:22.713 7674-7674 event com.example.test1602242 D KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_ENTER, scanCode=28, metaState=0, flags=0x8, repeatCount=0, eventTime=1838984952000, downTime=1838984952000, deviceId=0, source=0x301, displayId=-1 }
Видимо это такая специфика использования эмулятора. Но не понятно как приложение поведет себя на реальном устройстве.
Ответы (1 шт):
editText.setOnEditorActionListener( new TextView.OnEditorActionListener( ){
public boolean onEditorAction( TextView v, int actionId, KeyEvent event ){
if(actionId == EditorInfo.IME_ACTION_DONE){
editText.clearFocus( );
InputMethodManager iMM = (InputMethodManager)MainActivity.this.getSystemService( Context.INPUT_METHOD_SERVICE );
iMM.hideSoftInputFromWindow( editText.getWindowToken(), 0 );
}
return true;
}
});