くうと徒然なるままに

モバイルアプリを作りながらバックエンドも作っています。

WindowInsets を利用してキーボードを表示・非表示にしたり表示状態を取得したり

前提条件

Android 11 以降

何をするのか

WindowInsets に追加された機能を組み合わせることでキーボードを表示・非表示にしたり現在の表示状態をコントロールして遊べそうだったので検証してみた記事です。

ソースコード

今回遊んだコードはこんな感じです。 Fragment のなかで呼び出しました。呼び出す場所に応じて良い感じに切り替えてもらえると良さそう。

        // キーボードを表示しているのかを返す
        fun isKeyboardVisible() = this.view?.rootWindowInsets?.isVisible(WindowInsets.Type.ime()) ?: false
        // キーボードを表示する
        fun showKeyboard() = this.view?.windowInsetsController?.show(WindowInsets.Type.ime())
        // キーボードを隠す
        fun hideKeyboard() = this.view?.windowInsetsController?.hide(WindowInsets.Type.ime())

Android 11 にて追加されたもの

WindowInsets#isVisible

引数で渡してあげた WindowInsets が表示されているかを取得できるメソッドのようです。

WindowInsets.Type#ime()

.Type 自体がAndroid 11 から追加されたもののようです。 この中に定義されている ime() を指定して使っています。

WindowInsetsController#show(WindowInsets.Type)/WindowInsetsController#hide(WindowInsets.Type)

指定したWindowInsets の表示・非表示を切り替えてくれるメソッドです。

参考

developer.android.com