最近、キーボードの表示と非表示を監視する必要があることに気づき、将来の使用に備えて拡張メソッドを 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)