Закрыть / скрыть Softkey от Android с Kotlin

Я пытаюсь написать простое приложение для Android в Котлине. В моем макете есть EditText и кнопка. После записи в поле редактирования и нажатия на кнопку я хочу скрыть виртуальную клавиатуру.

Существует популярный вопрос « Закрыть / скрыть Android Soft Keyboard» о том, как это сделать на Java, но, насколько я понимаю, должна быть альтернативная версия для Kotlin. Как я должен это делать?

Думаю, мы можем немного улучшить ответ Виктора. Исходя из того, что он всегда привязан к представлению, будет контекст, если есть контекст, то есть InputMethodManager

fun View.hideKeyboard() { val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager imm.hideSoftInputFromWindow(windowToken, 0) } 

В этом случае контекст автоматически означает контекст представления. Как вы думаете?

Вы можете использовать Anko, чтобы облегчить жизнь, поэтому линия будет:

 inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0) 

или, возможно, лучше создать функцию расширения:

 fun View.hideKeyboard(inputMethodManager: InputMethodManager) { inputMethodManager.hideSoftInputFromWindow(windowToken, 0) } 

и назовите его так:

 view?.hideKeyboard(activity.inputMethodManager) 

Решение Peter решительно решает проблему, расширяя функциональность класса View. Альтернативный подход может заключаться в расширении функциональности класса Activity и, таким образом, связывании операции сокрытия клавиатуры с контейнером View, а не в представлении.

 fun Activity.hideKeyboard() { val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager imm.hideSoftInputFromWindow(findViewById(android.R.id.content).getWindowToken(), 0); } 

Используйте следующие служебные функции в вашей деятельности, Фрагменты, чтобы скрыть мягкую клавиатуру.

 fun Fragment.hideKeyboard() { activity.hideKeyboard(view) } fun Activity.hideKeyboard() { hideKeyboard(if (currentFocus == null) View(this) else currentFocus) } fun Context.hideKeyboard(view: View) { val inputMethodManager = getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0) } 

Это закроет клавиатуру независимо от вашего кода либо в фрагменте диалога, либо в действии и т. Д.

Это хорошо работает с API 26.

 val view: View = if (currentFocus == null) View(this) else currentFocus val inputMethodManager = getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0)