Пользовательская настройка EditText и обратной кнопки Android

Я хочу переопределить кнопку «Назад», когда отображается мягкая клавиатура. В основном, когда нажата кнопка «Назад», я хочу, чтобы клавиатура отклонялась, и я хочу добавить какой-либо текст к тому, что пользователь набрал в этом текстовом поле редактирования. Поэтому в основном мне нужно знать, когда клавиатура отклоняется. После поиска я понял, что для этого нет API, и единственным реальным способом сделать это будет создание вашего класса EditText.

Поэтому я создал свой собственный класс EditText и расширил EditText, как это

public class CustomEditText extends EditText { public CustomEditText(Context context) { super(context); init(); } public CustomEditText(Context context, AttributeSet attrs) { super(context, attrs); init(); } public CustomEditText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } private void init() { } } 

Я также добавил этот метод

  @Override public boolean dispatchKeyEventPreIme(KeyEvent event) { if (KeyEvent.KEYCODE_BACK == event.getKeyCode()) { Log.v("", "Back Pressed"); //Want to call this method which will append text //init(); } return super.dispatchKeyEventPreIme(event); } 

Теперь этот метод переопределяет кнопку «Назад», он закрывает клавиатуру, но я не знаю, как передать текст в поле EditText. Кто-нибудь знает, как я это сделаю?

Также еще один быстрый вопрос: кто-нибудь знает, почему этот метод вызывается дважды? Как вы можете видеть на данный момент, я добавил быстрое сообщение logcat, чтобы проверить, работает ли оно, но когда я нажимаю кнопку «Назад», он печатает его дважды, по какой-либо причине, почему это будет сделано?

Любая помощь приветствуется!!

Это связано с тем, что диспетчерKeyEventPreIme вызывается как для ACTION_DOWN, так и для ACTION_UP .
Вам придется обрабатывать только при нажатии кнопки KEY. Поэтому используйте

if(event.getAction () == KeyEvent.ACTION_DOWN)

Изменить: для первого вопроса Вы могли бы сделать

 setText(getText().toString() + " whatever you want to append"); 

В dispatchKeyEventPreIme

Почему дважды? Вероятно, метод вызывается при нажатии вниз и вверх.