前提条件
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 の表示・非表示を切り替えてくれるメソッドです。