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
            }
        }
    }
}

Fanwai
EditText は、複数行のテキストを入力する場合は inputType="textMultiLine"、キーボードの右下隅にボタンを設定する場合は imeOptions="actionDone" によって xml で設定できます。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