如何使用 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)
}
简单地创建一个扩展函数可以从任何你获得上下文的地方调用它
我想从片段中关闭软键盘。 我找到了很多答案,但它们都在 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)
}
简单地创建一个扩展函数可以从任何你获得上下文的地方调用它