用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)