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(). Тем не менее, клавиатура больше не исчезает, когда я нажимаю "Готово". Как мне восстановить это поведение по умолчанию в рутине?

4 ответа

Решение

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

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()), он все равно будет использовать действие по умолчанию после этого. Если вы возвращаете "true", вы говорите, что вы счастливый программист, и все, что нужно было сделать, произошло в вашем mySubroutine (), и действие по умолчанию не требует каких-либо действий.

Вы можете закрыть клавиатуру, выполнив:

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

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

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

У меня такая же проблема. Сразу после изменения 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);
Другие вопросы по тегам