Kotlin 监听键盘显示隐藏

这篇博客介绍了如何在Kotlin中监听Android键盘的显示和隐藏,通过活动的扩展方法实现屏幕高度变化的监听。此外,还讨论了EditText的设置问题,包括如何让inputType为textMultiLine的EditText保持imeOptions的actionDone功能,通过代码实现两者兼顾。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近碰上了需要监听键盘显示和隐藏,在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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值