当前位置:  开发笔记 > 运维 > 正文

使用Kotlin关闭/隐藏Android软键盘

如何解决《使用Kotlin关闭/隐藏Android软键盘》经验,为你挑选了4个好方法。

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

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



1> Péter Szűcs..:

我想我们可以稍微提高Viktor的答案.基于它始终附加到视图,将有上下文,如果有上下文,则有InputMethodManager

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

在这种情况下,上下文自动表示视图的上下文.你怎么看?



2> Gunhan..:

在"活动","片段"中使用以下实用程序功能隐藏软键盘.

(*)最新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()



3> 小智..:

只需在您的活动中覆盖此方法即可。它也将自动在其子片段中工作.....

在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)
    }

如果它适合您,请投票...谢谢.....



4> michal.z..:

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);
}

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有