我正在尝试在Kotlin中编写一个简单的Android应用程序.我的布局中有一个EditText和一个Button.在编辑字段中写入并单击按钮后,我想隐藏虚拟键盘.
有一个流行的问题 关闭/隐藏Android软键盘关于在Java中执行它,但据我所知,应该有一个替代版本的Kotlin.我该怎么办?
我想我们可以稍微提高Viktor的答案.基于它始终附加到视图,将有上下文,如果有上下文,则有InputMethodManager
fun View.hideKeyboard() { val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager imm.hideSoftInputFromWindow(windowToken, 0) }
在这种情况下,上下文自动表示视图的上下文.你怎么看?
在"活动","片段"中使用以下实用程序功能隐藏软键盘.
(*)最新Kotlin版本的更新
fun Fragment.hideKeyboard() { view?.let { activity?.hideKeyboard(it) } } fun Activity.hideKeyboard() { hideKeyboard(currentFocus ?: View(this)) } fun Context.hideKeyboard(view: View) { val inputMethodManager = getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager inputMethodManager.hideSoftInputFromWindow(view.windowToken, 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) }
这将关闭键盘,无论您的代码如何在对话框片段和/或活动等.
活动/片段中的用法:
hideKeyboard()
只需在您的活动中覆盖此方法即可。它也将自动在其子片段中工作.....
在JAVA中
@Override public boolean dispatchTouchEvent(MotionEvent ev) { if (getCurrentFocus() != null) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); } return super.dispatchTouchEvent(ev); }
在科特林
override fun dispatchTouchEvent(ev: MotionEvent?): Boolean { if (currentFocus != null) { val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager imm.hideSoftInputFromWindow(currentFocus!!.windowToken, 0) } return super.dispatchTouchEvent(ev) }
如果它适合您,请投票...谢谢.....
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); }