ステータスバーを非表示にする

このレッスンでは、 Android。ステータスバー(およびオプションでナビゲーション バー)を非表示にすると、 コンテンツの表示スペースが広くなるため、没入感のあるユーザー エクスペリエンスを実現できます。

ステータスバーが表示されたアプリを図 1 に示します。

システムバー

図 1. 表示状態のステータスバー

ステータスバーを非表示にした状態のアプリを図 2 に示します。アクションバーも非表示になっています。 ステータスバーなしではアクションバーを表示しないでください。

システムバー

図 2. 非表示状態のステータスバー

ステータスバーを非表示にする(Android 4.0 以前)

Android 4.0(API レベル 14)以前では、 WindowManager フラグ。これは、プログラムで行うことも、 アプリのマニフェスト ファイルでアクティビティ テーマを設定する。アプリのアクティビティ テーマを設定する ステータスバーを常に表示しておく必要がある場合は、マニフェスト ファイルを使用することをおすすめします。 (厳密に言えば、モジュールをプログラムでオーバーライドすることも、 できます。例:

<application
    ...
    android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" >
    ...
</application>

アクティビティ テーマを使用した場合、次のようなメリットがあります。

  • プログラムでフラグをセットするよりも、メンテナンスが簡単で、エラーを低減することができます。
  • システムに必要な情報があるため、UI の遷移がより滑らかになります。 を使用して UI をレンダリングしてから、アプリのメイン アクティビティをインスタンス化してください。

または、WindowManager フラグをプログラムで設定することもできます。 このアプローチにより、ユーザーが操作する際にステータスバーの非表示 / 表示が簡単になります。 必要があります。

Kotlin

class MainActivity : Activity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // If the Android version is lower than Jellybean, use this call to hide
        // the status bar.
        if (Build.VERSION.SDK_INT < 16) {
            window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN)
        }
        setContentView(R.layout.activity_main)
    }
    ...
}

Java

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // If the Android version is lower than Jellybean, use this call to hide
        // the status bar.
        if (Build.VERSION.SDK_INT < 16) {
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
        }
        setContentView(R.layout.activity_main);
    }
    ...
}

WindowManager フラグを設定するとき(アクティビティ テーマまたは フラグは、アプリがフラグをクリアしない限り、有効なままになります。

次を使用: FLAG_LAYOUT_IN_SCREEN を有効にして、有効にしたときと同じ画面領域を使用するようにアクティビティのレイアウトを設定します。 FLAG_FULLSCREEN。これにより ステータスバーの表示 / 非表示を切り替えたときにコンテンツのサイズ変更を防ぐことができます。

ステータスバーを非表示にする(Android 4.1 以降)

Android 4.1(API レベル 16)以降では、 setSystemUiVisibility() を使用します。 setSystemUiVisibility() は UI フラグを次の値に設定: 個々のビューレベルこれらの設定はウィンドウ レベルで集計されます。使用 setSystemUiVisibility(): UI フラグを設定する 使用するよりも、システムバーをきめ細かく制御できます。 WindowManager フラグ。ステータスバーを非表示にするスニペットを以下に示します。

Kotlin

// Hide the status bar.
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN
// Remember that you should never show the action bar if the
// status bar is hidden, so hide that too if necessary.
actionBar?.hide()

Java

View decorView = getWindow().getDecorView();
// Hide the status bar.
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
// Remember that you should never show the action bar if the
// status bar is hidden, so hide that too if necessary.
ActionBar actionBar = getActionBar();
actionBar.hide();

次の点にご注意ください。

  • UI フラグがクリアされると(たとえば、 バーを再度非表示にするには、アプリで設定をリセットする必要があります。 詳しくは、UI 表示の変更に対応するをご覧ください。 UI の表示の変更をリッスンして、アプリがユーザーの 適切に対応します
  • UI フラグをセットする場所によって違いが生じます。アクティビティの onCreate() メソッドを呼び出し、ユーザーがホームボタンを押すと、システムバーが 表示されます。ユーザーがアクティビティを再度開くと、onCreate() 呼び出されないため、システムバーは引き続き表示されます。システム UI を変更して ユーザーがアクティビティを出入りする際も保持されるようにするには、 onResume() または onWindowFocusChanged()
  • メソッド setSystemUiVisibility() 呼び出し元のビューが表示されている場合にのみ効果があります。
  • ビューから離れるとフラグが発生する setSystemUiVisibility() で設定 選択します。

コンテンツをステータスバーの背後に表示する

Android 4.1 以降では、アプリのコンテンツを背景に ステータスバーの表示 / 非表示を切り替えてもコンテンツのサイズを変更せずに、 これを行うには、 SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN。 また、kubectl の SYSTEM_UI_FLAG_LAYOUT_STABLE: アプリが 作成します。

このアプローチを採用する場合、ユーザーの責任において、 アプリの UI(たとえば、マップアプリの組み込みのコントロール)の システムバーに埋もれてしまいがちですこのような部分が覆われると、アプリが使用できなくなる可能性があります。ほとんどの場合、 これに対処するには、XML レイアウト ファイルに android:fitsSystemWindows 属性を追加して、 true。親 ViewGroup のパディングを調整します。 システム ウィンドウ用のスペースを残します。ほとんどのアプリにおいて、この対応で十分です。

ただし、場合によっては、デフォルトのパディングを調整して、 作成できますアカウントの コンテンツの配置は、システムバー(ウィンドウと呼ばれる領域)を基準として 「コンテンツ インセット」など)を指定し、fitSystemWindows(Rect insets) をオーバーライドします。 fitSystemWindows() メソッドは、サービス プロバイダによって ウィンドウのコンテンツ インセットが変更されたときにビュー階層を作成し、ウィンドウを それに応じて内容を調整します。このメソッドをオーバーライドすることで、 インセット(つまりアプリのレイアウト)を自由にカスタマイズできます。