Android: Скрытие клавиатуры в переопределенном "Готово" нажатии EditText

Я использовал немного кода Android для переопределения кнопки "Готово" в поле EditText:

   myEditField.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_DONE) {

                mySubroutine();

                return true;
            }
            return false;
        }
    });

Активация поля вызывает клавиатуру, и нажатие "Готово" успешно оценивает mySubroutine(). Однако клавиатура больше не исчезает, когда я нажимаю "Готово" . Как восстановить это поведение по умолчанию для этой процедуры?

Ответ 1

Почему бы и нет:

myEditField.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
        if (actionId == EditorInfo.IME_ACTION_DONE) { 

            mySubroutine(); 
        } 
        return false; 
    } 
}); 

Просто верните значение false после обработки кода. Это можно интерпретировать как независимо от того, что ваш код (mySubroutine()), по-прежнему будет использовать действие по умолчанию впоследствии. Если вы вернете "истину", вы говорите, что вы счастливый кодер, и все, что нужно было сделать, произошло в вашем mySubroutine(), и действие по умолчанию не нужно предпринимать.

Ответ 2

Вы можете закрыть клавиатуру, выполнив следующие действия:

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getWindowToken(), 0);

Ответ 3

Вы должны прикрепить onClickListener к кнопке, которая выполняет следующий код:

InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editview.getWindowToken(), 0);

Ответ 4

У меня была та же проблема. Сразу после изменения editText VISIBILITY от GONE до VISIBLE мне пришлось установить фокус и отобразить мягкую клавиатуру. Я достиг этого, используя следующий код:

        (new Handler()).postDelayed(new Runnable() {

        public void run() {              yourEditText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
            yourEditText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));                       

        }
    }, 200);