Как убрать клавиатуру с экрана андроид
Перейти к содержимому

Как убрать клавиатуру с экрана андроид

  • автор:

Android Practice

Закрытие скрытие софт клавиатуры в Android

В приложении вам может понадобиться закрыть или скрыть софт клавиатуру программно чтобы она собой не закрывала пользователю экран и возникает вопрос как это сделать. Ниже приведен небольшой метод который поможет скрыть клавиатуру.

// Проверяем если ли View с фокусом View view = this.getCurrentFocus(); if (view != null)

Если у вас есть Context то можно получить InputMethodManager из него.

InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);

Для того чтобы убрать клавиатуру мы использовали метод hideSoftInputFromWindow

класса InputMethodManager. Вторым параметром передается 0, почему-то в Android не нашлось константы для него, но между тем это нормальное значение. Используйте это метод когда вам нужно закрыть или скрыть клавиатуру.

Убрать клавиатуру при щелчке на свободное место

куда прописать — в обработчик клика виджета, после клика по которому должна убираться клавиатура. Что прописать — вызов метода clearFocus.

5 сен 2013 в 6:52

Учтите, что инструкции к android примитивно-недостаточны. Что такое кнопка «Back» — никто не догадается.

15 мар 2017 в 11:17

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Мне кажется это какой-то нездоровый паттерн действий юзера. В Андроид предусмотрен способ скрытия клавиатуры нажатием кнопки «Back» или же в некоторых софт-клавиатурах предусмотрена кнопка скрытия клавиатуры. Кроме того нельзя упускать из виду, что есть девайсы с хардверными клавиатурами. Так что я бы не стал заморачиваться таким велосипедостроительством. Если это ваша личная инициатива — забудьте о ней, если хотелки заказчика, то попробуйте объяснить ему что в экосистеме Андроида так не принято делать — покажите ему альтернативы. Если заказчик все равно хочет — установите ему клавиатуру с кнопкой скрытия. Если все равно продолжает настаивать то тогда изобретайте велосипед примерно таким макаром:

  1. Определите что такое «другое место экрана»
  2. В этом «другом месте экрана» повесьте листенер клика — View.OnClickListener
  3. По событию клика убирайте фокус EditText.clearFocus() или просто скрывайте клаву через getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN)

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

Надо обрабатывать Activity.onTouchEvent() — он вызывается всякий раз когда касание не было перехвачено никаким виджетом/вьюшкой. Далее применяем п. 3. Минус этого решения в том, что скрытие клавы будет происходить только при касании пустого места в Activity — то есть опять упирается в определение понятия «другого места экрана»

[Перевод] Как закрыть/скрыть программную клавиатуру в Android

От переводчика: без шуток, а можно было бы создать более простое решение для такой казалось бы простой и частой задачи.

Предисловие: Если вы читали какую-либо из моих статей по Android, то уже знаете, что я думаю о худшем SDK на Земле (английский). Эта статья только укрепила это мнение. К моему разочарованию, я создал то, что стало топ ответом Stack Overflow в вопросе по поводу сокрытия клавиатуры в Android. И хоть я и счастлив, что был полезен. Но так же я бы хотел, чтобы SDK не был таким отстойным и не требовало написания целой статьи для подобного.

Вопрос простой. БЕЗУМНО сложный ответ.

Чтобы помочь прояснить последующее безумия, я бы хотел извиниться от имени всех пользователей Android за отвратительное отношение Google к программной клавиатуре. Причина, по которой на простой вопрос StackOverflow есть так много разных ответов — ужасный дизайн этого API (как и многих других в Android). Не смог придумать как это сказать мягче.

Я хочу спрятать клавиатуру. Я ожидаю, что Android предоставит что-то вроде: Keyboard.hide()

Но у Android есть проблема. Вы должны использовать для этого InputMethodManager. ОК, ладно, это Android API для клавиатуры.

НО! Вам так же нужно иметь Context для доступа к IMM. Вот теперь у нас проблема. Возможно я хочу скрыть клавиатуру из статического или вспомогательного класса, которые не используют и не нуждаются ни в каких Context. Но еще хуже то, что IMM требует от вас указать для какого View (или того хуже Window) вы хотите скрыть клавиатуру.

Это и делает из простой операции целое испытание.

Дорогой Google: Когда я ищу рецепт торта, то нет на Земле никакого RecipeProvider, который откажет в выдаче рецепта, пока я не укажу КТО будет есть этот торт и ГДЕ он будет это делать.

Скрываем клавиатуру из Activity

Я создал статическую функцию, которая надежно выполняет эту задачу (если вы вызываете её из Activity).

Прим. в оригинале используют Java, но у меня все проекты уже на Kotlin, да и язык сейчас все популярнее, а потому добавлю немного измененный аналогичный код.

Как убрать клавиатуру?

У меня есть DialogFragment, в нем поле для ввода.
Если при клике на нем появляется клавиатура, а потом диалог закрывается, то клавиатура продолжает висеть и раздражать пользователя.
Как её убрать?

Пробую вот так вот в диалоге при клике на кнопку закрытия диалога и ничего не происходит (пробовал в активности из которой вызывается — то же ничего):
InputMethodManager imm = (InputMethodManager) getActivity().getApplicationContext().getSystemService(getActivity().getApplicat ionContext().INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как убрать клавиатуру в EditText?
Есть EditText в нем ссылка которую нужно выделять для копирования (выделить и копировать) когда это.

Как программно убрать клавиатуру после нажатия кнопки «Далее»?
Здравствуйте, уважаемые форумчане. Я недавно начал изучать android и столкнулся со следующей.

Убрать клавиатуру
Есть Navigation Activity, там EditText. Проблема в том, что если напечатать в нем что-то, а потом.

Убрать экранную клавиатуру
Здравствуйте. На активити размещены различные элементы (кнопки, сикбары, чекбоксы и текстовые.

76 / 76 / 57
Регистрация: 07.08.2016
Сообщений: 173
Попробуйте добавить этот код во фрагмент и/или в активность.

1 2 3 4 5 6 7 8 9 10 11
private void hideKeyboard() { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) hideKeyboard(); return super.dispatchTouchEvent(ev); }

Должна закрываться клавиатура при касание любой области экрана вне клавиатуры. В активности у меня это работает. Во фрагменте не пробовал.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *