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

このレッスンでは、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 の重要な部分が最終的にシステムバーで隠れないようにする必要があります。このトピックの詳細については、 ステータスバーを非表示にするのレッスンをご覧ください。