このレッスンでは、Androidの異なるバージョンでステータスバーを隠す方法について説明します。 ステータス バー (およびオプションでナビゲーション バー) を非表示にすると、コンテンツが表示領域の多くを使用できるようになり、それによってより没入感のあるユーザー エクスペリエンスが提供されます。 ステータス バーが表示されている状態。
図 2 は、ステータス バーが非表示のアプリを示します。 アクション バーも非表示になっていることに注意してください。 ステータス バーがない状態でアクション バーを表示することはできません。
Figure 2. 隠されたステータスバー。
Hide the Status Bar on Android 4.0 and Lower
Android 4.0 (API level 14) 以下では、WindowManager
フラグを設定することにより、ステータスバーを非表示にすることが可能です。 これは、プログラムまたはアプリのマニフェスト ファイルでアクティビティ テーマを設定することにより行うことができます。 アプリでステータス バーを常に非表示にする必要がある場合は、アプリのマニフェスト ファイルでアクティビティ テーマを設定することが望ましい方法です (ただし、厳密に言えば、必要であればプログラムでテーマをオーバーライドすることもできます)。 たとえば、
<application ... android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" > ...</application>
活動テーマを使用する利点は次のとおりです。
- プログラムでフラグを設定するよりも保守しやすく、エラーが発生しにくいです。
- システムには、アプリケーションのメイン アクティビティをインスタンス化する前に UI をレンダリングするために必要な情報があるため、UI の遷移がよりスムーズになります。このアプローチでは、ユーザーがアプリと対話するときに、ステータス バーを簡単に隠したり表示したりできます。
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
フラッグを設定すると (Activity Theme またはプログラムであっても)、アプリケーションがそれらをクリアしないかぎりフラグは有効のままです。FLAG_LAYOUT_IN_SCREEN
を使用して、FLAG_FULLSCREEN
を有効にしたときに利用可能な同じ画面領域を使用するようにアクティビティ レイアウトを設定することができます。 これは、ステータス バーの表示/非表示時にコンテンツのサイズが変更されることを防ぎます。Hide the Status Bar on Android 4.1 and Higher
You can hide the status bar on Android 4.1 (API level 16) and higher by using
setSystemUiVisibility()
.setSystemUiVisibility()
sets UI flags at the individual view level; these settings are aggregated to the window level.を使用すると、ステータス バーを表示しません。 UIフラグを設定するためにsetSystemUiVisibility()
を使用すると、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();
Note the following:
- UI フラグはいったんクリアすると(たとえばアクティビティから移動して)、バーを再び隠す場合はアプリケーションでそれらをリセットする必要があります。アプリケーションが適切に対応できるように UI の可視性の変更を監視する方法についての議論は、UI の可視性の変更への対応を参照してください。 アクティビティの
onCreate()
メソッドでシステム バーを非表示にし、ユーザーがホームを押すと、システム バーが再び表示されます。 ユーザーがアクティビティを再び開くと、onCreate()
は呼び出されないので、システムバーは表示されたままになります。 ユーザーがアクティビティに出入りするときにシステムUIの変更を維持したい場合は、onResume()
またはonWindowFocusChanged()
にUIフラグを設定します。 setSystemUiVisibility()
のメソッドは、呼び出したビューが可視である場合にのみ効果があります。- ビューから離れると、
setSystemUiVisibility()
で設定されたフラグがクリアされます。この方法を使用する場合、アプリの UI の重要な部分 (たとえば、マップ アプリケーションの組み込みコントロール) がシステム バーに覆われてしまわないようにする責任が生じます。 これは、アプリを使用不能にする可能性があります。 ほとんどの場合、XMLレイアウトファイルにandroid:fitsSystemWindows
属性を追加し、true
に設定することでこの問題に対処できます。 これにより、親のViewGroup
のパディングが調整され、システムウィンドウのためのスペースが残されます。 3612>しかし、場合によっては、アプリケーションに必要なレイアウトを得るために、デフォルトのパディングを変更する必要があるかもしれません。
fitSystemWindows()
メソッドは、ウィンドウのコンテンツ インセットが変更されたときにビュー階層によって呼び出され、ウィンドウがそれに応じてコンテンツを調整することを可能にします。 このメソッドをオーバーライドすることで、インセット (つまり、アプリのレイアウト) を好きなように処理することができます。
- UI フラグはいったんクリアすると(たとえばアクティビティから移動して)、バーを再び隠す場合はアプリケーションでそれらをリセットする必要があります。アプリケーションが適切に対応できるように UI の可視性の変更を監視する方法についての議論は、UI の可視性の変更への対応を参照してください。 アクティビティの