Kotlin 监听键盘显示隐藏

简介: 【10月更文挑战第17天】

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)
相关文章
|
1月前
|
JavaScript 前端开发 Android开发
JavaScript触摸touch事件
JavaScript触摸touch事件
|
6月前
|
缓存 JavaScript
Vue: 事件修饰符, 键盘事件, 鼠标事件,计算属性
Vue: 事件修饰符, 键盘事件, 鼠标事件,计算属性
57 2
|
5月前
Qml:键盘事件
Qml:键盘事件
|
6月前
|
Android开发 Kotlin
android开发,使用kotlin学习滚动控件RecyclerView
android开发,使用kotlin学习滚动控件RecyclerView
170 0
|
运维 JavaScript 前端开发
brython | 笨办法写个连连看-2. 监听鼠标事件
brython | 笨办法写个连连看-2. 监听鼠标事件
160 2
|
JavaScript API iOS开发
js: 监听键盘按键事件KeyboardEvent
js: 监听键盘按键事件KeyboardEvent
315 0
|
XML Android开发 数据格式
kotlin中书写点击事件的几种方式
kotlin中书写点击事件的几种方式
JavaScrip 常用的键盘事件
JavaScrip 常用的键盘事件
103 0
|
运维 Kubernetes 前端开发
【前端】探讨:如何通过 JavaScript 模拟鼠标悬浮?
【前端】探讨:如何通过 JavaScript 模拟鼠标悬浮?
380 0
【前端】探讨:如何通过 JavaScript 模拟鼠标悬浮?
C#(二十八)之C#鼠标事件、键盘事件
鼠标事件分为两种:EventArgs、MouseEventArgs。 键盘事件:KeyEventArgs、KeyPressEventArgs、KeyPress、KeyDown、KeyUp。
455 0
C#(二十八)之C#鼠标事件、键盘事件