用Kotlin关闭/隐藏Android软键盘

我正在尝试在Kotlin上编写一个简单的Android应用程序。 我在我的布局中有一个EditText和一个按钮。 在编辑字段中写入并单击按钮后,我想要隐藏虚拟键盘。

有一个流行的问题 关闭/隐藏Android软键盘在Java中做的,但据我所知,应该有一个替代版本的Kotlin。 我应该怎么做?

我想我们可以稍微改进Viktor的答案。 基于它总是附加到一个视图,会有上下文,如果有上下文,那么有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的容器而不是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)