Управление программной клавиатурой в Android: показ и скрытие

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы скрыть клавиатуру, используйте метод hideSoftInputFromWindow класса InputMethodManager с windowToken ваших элементов управления:

Java
Скопировать код
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

Чтобы отобразить клавиатуру, вызовите метод showSoftInput, указав соответствующий элемент:

Java
Скопировать код
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
    imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
}

Помните, что для выполнения этих операций элемент должен быть в фокусе.

Улучшенное управление виртуальной клавиатурой

Изучим продвинутые методы управления виртуальной клавиатурой:

Использование Runnable

Запуск Runnable в методе onResume обеспечивает надёжное отображение клавиатуры:

Java
Скопировать код
@Override
protected void onResume() {
    super.onResume();
    myEditText.post(() -> {
        myEditText.requestFocus(); // Отвлекаем внимание
        InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        mgr.showSoftInput(myEditText, InputMethodManager.SHOW_IMPLICIT); // Магия в действии!
    });
}

Фокус на EditText

Напоминаем о важных моментах:

  • Добавьте android:focusableInTouchMode="true" для EditText в XML-разметке. Это важно!
  • Программно вызовите myEditText.requestFocus();. Концентрированность – залог успеха!

InputMethodManager – дирижер клавиатуры

Всегда проверяйте InputMethodManager на null. Не забывайте о резервном пути:

Java
Скопировать код
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
    // Готовимся к действию!
    imm.showSoftInput(view, 0);
    // Или ко исполнению 
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

Настройка файла AndroidManifest.xml

Для управления поведением клавиатуры при изменении ориентации экрана сконфигурируйте ваш AndroidManifest.xml:

xml
Скопировать код
<activity android:name=".MyActivity"
          android:windowSoftInputMode="adjustResize|stateHidden" />

Гибкое управление через пользовательские view

Если вы используете пользовательские представления (view), примените метод onFinishInflate(), чтобы управлять клавиатурой как профессионал.

Переключение состояния клавиатуры: раскройте новые возможности

Иногда вам просто нужно переключить состояние клавиатуры:

Java
Скопировать код
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
    // Переключаем состояние!
    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
    // И переключаем обратно:
    imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
}

Визуализация

Метод showSoftInput открывает клавиатуру:

Java
Скопировать код
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);

Это как приглашение гостей входить (👋📲).

Метод hideSoftInputFromWindow закрывает клавиатуру:

Java
Скопировать код
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);

На таком вежливом прощании закончиваем наше общение (👋🚪🔒).

Подготовка и открытие клавиатуры

Не спешите показывать клавиатуру до того, как view будет готов:

Java
Скопировать код
editText.post(() -> {
    editText.requestFocus();
    InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    mgr.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
});

Управление отображением клавиатуры: очищаем сцену!

Если клавиатура должна исчезнуть при нажатии на неактивный элемент view, используйте следующую параметризацию в XML:

xml
Скопировать код
<!-- В вашем XML -->
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:focusableInTouchMode="true">

    <!-- Остальные элементы -->

</LinearLayout>

Теперь при нажатии вне EditText фокус переходит на LinearLayout, убирая клавиатуру.

Будьте в курсе

Следите за обновлениями, изменениями API и развитием технологий – информация быстро устаревает, поэтому всегда оставайтесь в авангарде прогресса.

Полезные материалы

  1. InputMethodManager | Android Developers
  2. Как программно скрыть виртуальную клавиатуру на Android? – Stack Overflow
  3. EditText: как очистить фокус при нажатии вне элемента – Stack Overflow
  4. Методы ввода на экране – Блог разработчиков Android
  5. Управление видимостью клавиатуры | Android Developers
  6. Как показать виртуальную клавиатуру, когда EditText находится в фокусе – Stack Overflow