imple is Best

Android の上にあるバーを隠す

この記事は投稿から 3 年以上経過しています。
最新の情報は各種公式ドキュメント等をご覧下さい。

Android のアプリを作っていると上にある時刻とか通知アイコンが表示されてるあのバーを非表示にしたいときありますよね、とくにゲーム作ってるときとか。あそこ公式には status bar というのですが、そのステータスバーを非表示にする方法を見つけたのでメモっておきます。

公式がどうすれば良いのかを書いているので、それを参考にします。

参考: Hide the status bar | Android Developers

目指すもの

何もしないとこんな感じにあるステータスバーを

statusbarあり

こんな感じで非表示にできたらゴールです。

statusbarなし

API Level 16 以上でステータスバーを非表示にする

Android 4.1 以上でステータスバーを非表示にするには、setSystemUiVisibility() を利用します。これを使用することによって、WindowManager を利用するときに比べて細かくステータスバーをいじることもできます。

ステータスバーを隠すためのコードは以下の通りです。

window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN

actionBar?.hide() を使うと Actionbar も隠れ、まさにフルスクリーン状態になります。

API Level 15 以下でステータスバーを非表示にする

公式でば Theme を利用する方法と、コードで実装する方法が紹介されていました。

Theme を利用する

アプリの Theme を @android:style/Theme.Holo.NoActionBar.Fullscreen にします。

これだけでステータスバーを消すことができます。

コードで実装する

コードでステータスバーを隠す場合、Windows Manager を利用して Flag を設定します。

window.setFlags(
    WindowManager.LayoutParams.FLAG_FULLSCREEN,
    WindowManager.LayoutParams.FLAG_FULLSCREEN
)

API 15 以下の端末をサポートしたい場合、Build.VERSION.SDK_INT を利用して分岐させれば良いです。

2つの違い

Theme を用いた実装とコードを用いた実装、それぞれの利点は以下のとおりです。

  • Theme 利用
    • コードを利用する方法に比べて簡単に実装でき、なおかつエラーになりうる箇所が少ない
    • レンダリング前の時点で UI 情報として保持しているため、画面遷移がスムーズ
  • コード利用
    • ユーザの操作によって表示・非表示を切り替えることが簡単にできる

基本は Theme で実装することを考えたほうが良いでしょう。フルスクリーンにする画面がひとつしかなければコード実装でも良いかな?

余談

ドキュメントを読んでいるときに less error-prone という表現を見つけました。 error-prone ってなんやろな〜とぐぐってみると Google 提供の Error Prone というのを見つけました。コンパイル時に静的コード検査でよくあるエラーを発見するやつだそうです。素晴らしいツールですね。ちなみに Prone は形容詞で 〜の傾向がある という意味らしいです。