はじめに
たまーにキーボードの表示有無によって、UIを制御したいケースがあったりしますよね。
そういった場合に使用できる実装を残しておこうと思います。
表示状態を監視
キーボードの表示状態を監視するには、以下の実装を行うことで可能です。
fragment.kt
binding.root.addOnLayoutChangeListener { view, _, _, _, _, _, _, _, _ ->
val r = Rect()
view.getWindowVisibleDisplayFrame(r)
val location = IntArray(2)
view.getLocationOnScreen(location)
val screenHeight = view.rootView.height
// 変化の差分を算出
val heightDiff = screenHeight - r.height() - location[1]
// 画面縦幅の差分が想定している高さより大きい場合はキーボードが表示されたと判断する
val isShowKeyboard = heightDiff > screenHeight * KEYBOARD_MIN_HEIGHT_RATIO
}
companion object {
private const val KEYBOARD_MIN_HEIGHT_RATIO = 0.15
}
以上になります。
ちなみに余談ですが、GlobalLayoutListenerで監視することも可能ですが、こちらにあるように色々問題を抱えているようで、画面破棄されるまで使用し続けるような実装はメモリーリークに繋がるのでおすすめ出来ません。
さいごに
意外とこういった実装に頭を悩まされたりしますよね。
なるべく未来の自分が楽をできるよう、今後もどんどん投資していこうと思います。