よーこそtargetSdkVersion 30
の世界へ
本題
Activityを全画面にしたり、ステータスバー、ナビゲーションを一時的に消すときにwindow?.decorView?.systemUiVisibility
がAndroid 11から非推奨になった
代わりにWindowInsetsController
を使って消すらしい。
環境
なまえ | あたい |
---|
端末 | Pixel 3 XL |
Android | 11 Beta 1 |
非表示の種類
- スワイプすることで一時的にはステータスバー、ナビゲーションバーが表示され、数秒操作しないとまた自動で全画面に戻る
- 動画アプリとか
WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
を使う(後述)
- スワイプして、ステータスバーを表示させるけどそのまま表示したままになる
- どこで使ってるかはわからんな
WindowInsetsController.BEHAVIOR_SHOW_BARS_BY_SWIPE
を使う(後述)
追記
Android 6 以降ならAndroidX(androix.
から始まるパッケージ、クラスの最後にCompat
がつく)によるバックポートがあるのでそれを使えばいいと思います。
WindowInsetsController
もAndroid 11から追加されたAPIですが、AndroidX
(旧称:サポートライブラリ)を利用することでAndroid 6から対応することができます。
つくる
スワイプすると一時的に表示される方
一時的に表示しているバーは半透明になっている。
ノッチまでは広げなくていい場合は、ノッチにも侵略の一行をコメントアウトしてね。
もし一時的に表示ではなく、一回表示したらずっと出っぱなしにする際はsystemBarsBehavior
を
にすればいいと思います。
Type#systemBars()
を使うと、ステータスバーとナビゲーションバーを消しますが、別に以下のコードでも動きます。
おまけ
IME(キーボードのこと)もこのWindowInsetsController
を利用することで、一行で消せるようになりました。
キーボード隠すのなんか面倒だし成功したことないからこの方法が使えるのは嬉しい。🥳