ナビゲーション バーを非表示にする

このレッスンでは、Android 4.0(API レベル 14)で導入されたナビゲーション バーを非表示にする方法について説明します。

このレッスンではナビゲーション バーを非表示にする方法に焦点を当てていますが、実際のアプリでは同時にステータスバーも非表示にすることをおすすめします。詳細については、ステータスバーを非表示にするをご覧ください。 簡単にアクセスできる状態を維持しつつ、ナビゲーション バーとステータスバーを非表示にすると、表示領域全体をコンテンツが利用できるようになるため、没入型のユーザー エクスペリエンスを実現できます。

システムバー

図 1. ナビゲーション バー

ナビゲーション バーを非表示にする

SYSTEM_UI_FLAG_HIDE_NAVIGATION フラグを使用すると、ナビゲーション バーを非表示にできます。ナビゲーション バーとステータスバーを両方とも非表示にするスニペットを以下に示します。

Kotlin

    window.decorView.apply {
        // Hide both the navigation bar and the status bar.
        // SYSTEM_UI_FLAG_FULLSCREEN is only available on Android 4.1 and higher, but as
        // a general rule, you should design your app to hide the status bar whenever you
        // hide the navigation bar.
        systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN
    }
    

Java

    View decorView = getWindow().getDecorView();
    // Hide both the navigation bar and the status bar.
    // SYSTEM_UI_FLAG_FULLSCREEN is only available on Android 4.1 and higher, but as
    // a general rule, you should design your app to hide the status bar whenever you
    // hide the navigation bar.
    int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                  | View.SYSTEM_UI_FLAG_FULLSCREEN;
    decorView.setSystemUiVisibility(uiOptions);
    

注:

  • このアプローチの場合、画面上の任意の場所に触れると、ナビゲーション バー(およびステータスバー)が再表示され、表示状態を維持します。ユーザーの操作により、フラグがクリアされます。
  • フラグがクリアされた後、バーをもう一度非表示にしたい場合は、フラグをもう一度セットする必要があります。UI の表示設定変更をリッスンし、それに応答できるようにアプリを設計する方法については、UI の表示設定変更に応答するをご覧ください。
  • UI フラグをセットする場所によって違いが生じます。アクティビティの onCreate() メソッド内でシステムバーを非表示にした場合、ユーザーがホームボタンを押すと、システムバーが再表示されます。この場合、ユーザーがアクティビティを再度起動しても、onCreate() は呼び出されないため、システムバーは表示されたままになります。ユーザーがアクティビティの起動 / 終了を操作したときにシステム UI の表示設定変更を保持したい場合は、onResume()onWindowFocusChanged() 内で UI フラグをセットしてください。
  • setSystemUiVisibility() メソッドが効果を持つのは、呼び出し元のビューが表示されている場合に限られます。
  • ビューから離れると、setSystemUiVisibility() を使用してセットしたフラグはクリアされます。

コンテンツをナビゲーション バーの背後に表示する

Android 4.1 以降の場合、アプリのコンテンツをナビゲーション バーの背後に表示するように設定することで、ナビゲーション バーの表示 / 非表示の切り替えがあっても、コンテンツのサイズを変更せずに維持することができます。そのためには、SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION を使用します。また、SYSTEM_UI_FLAG_LAYOUT_STABLE を使用して、アプリが安定したレイアウトを維持できるようにすることをおすすめします。

このアプローチを使用する場合、アプリの UI の重要な部分がシステムバーによって覆われないように注意する必要があります。詳細については、ステータスバーを非表示にするをご覧ください。