Kotlin 监听键盘显示隐藏

最近碰上了需要监听键盘显示和隐藏,在Kotlin场景下封装了一个扩展方法,方便日后使用。

Android系统本身并没有提供有效的方法可以监听键盘的显示和隐藏,常用的监听方法莫过于屏幕的可见区域高度,当高度变化超过一定值,一般认为是超过200像素,就说明有键盘的显示和隐藏操作。

fun Activity.observeKeyboardChange(onChange: (isShowing: Boolean) -> Unit) {
    val rootView = this.window.decorView
    val r = Rect()
    var lastHeight = 0
    rootView.viewTreeObserver.addOnGlobalLayoutListener {
        rootView.getWindowVisibleDisplayFrame(r)
        val height = r.height()
        if (lastHeight == 0) {
            lastHeight = height
        } else {
            val diff = lastHeight - height
            if (diff > 200) {
                onChange(true)
                lastHeight = height
            } else if (diff < -200) {
                onChange(false)
                lastHeight = height
            }
        }
    }
}

番外
EditText可以在xml中通过inputType="textMultiLine"来设置可以输入多行文字,通过imeOptions="actionDone"来设置键盘右下角按钮,有ACTION_DONE、ACTION_SEARCH、ACTION_SEND等常用设置。

但是呢,如果设置了inputType=“textMultiLine”,可以多行输入,此时的键盘右下角按钮就会默认为换行操作,设置的imeOptions属性就会失效。在网上寻找多番,终于找到了一种有效的使得inputType="textMultiLine"和imeOptions="actionDone"同时生效的方法。

首先,在xml里设置inputType=“textMultiLine”;
然后,通过代码设置imeOptions为actionDone。

et.imeOptions = EditorInfo.IME_ACTION_DONE
et.setRawInputType(InputType.TYPE_CLASS_TEXT)

猜你喜欢

转载自blog.csdn.net/yuantian_shenhai/article/details/126084868