LoginSignup
1
1

More than 1 year has passed since last update.

キーボードの表示状態を監視する方法

Posted at

はじめに

たまーにキーボードの表示有無によって、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で監視することも可能ですが、こちらにあるように色々問題を抱えているようで、画面破棄されるまで使用し続けるような実装はメモリーリークに繋がるのでおすすめ出来ません。

さいごに

意外とこういった実装に頭を悩まされたりしますよね。
なるべく未来の自分が楽をできるよう、今後もどんどん投資していこうと思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1