如何使用 Kotlin 从片段中关闭软键盘?

How to close the soft keyboard from a fragment using Kotlin?

我想从片段中关闭软键盘。 我找到了很多答案,但它们都在 Java 中。通常我可以很容易地将它转换到 Kotlin,但我很难做到这一点。

我得到的最接近的是:

fun closeKeyboard() {
    val activity = activity as FeedActivity

    val view = activity.currentFocus
    if (view != null) {
        val imm = ContextCompat.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager?
        imm!!.hideSoftInputFromWindow(view!!.getWindowToken(), 0)
    }
}

但是我在这部分遇到了问题getSystemService(Context.INPUT_METHOD_SERVICE)

ContextCompat.getSystemService外,一切正常。使用 Activity 实例代替 ContextCompat.

val imm = activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(view!!.getWindowToken(), 0)

我来这里是为了在我无法直接访问 Activity 实例的情况下寻找类似问题的答案。

虽然已接受的答案有效,但如果您通过了所请求服务的 class,您仍然可以使用 ContextCompat,并且可以为您完成转换,如下所示:

val imm = ContextCompat.getSystemService(view.context, InputMethodManager::class.java)
imm?.hideSoftInputFromWindow(view.windowToken, 0)
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)
}

简单地创建一个扩展函数可以从任何你获得上下文的地方调用它