Diese Lektion beschreibt, wie man die Statusleiste auf verschiedenen Android-Versionen ausblendet. Durch das Ausblenden der Statusleiste (und optional der Navigationsleiste) kann der Inhalt mehr Platz auf dem Display einnehmen, wodurch ein intensiveres Benutzererlebnis entsteht.
Abbildung 1 zeigt eine App mit einer sichtbaren Statusleiste:
Abbildung 1. Sichtbare Statusleiste.
Abbildung 2 zeigt eine App mit einer ausgeblendeten Statusleiste. Beachten Sie, dass auch die Aktionsleiste ausgeblendet ist. Sie sollten die Aktionsleiste nie ohne die Statusleiste anzeigen.
Abbildung 2. Ausgeblendete Statusleiste.
Ausblenden der Statusleiste unter Android 4.0 und niedriger
Sie können die Statusleiste unter Android 4.0 (API-Level 14) und niedriger ausblenden, indem SieWindowManager
Flags setzen. Sie können dies programmatisch tun oder indem Sie ein Aktivitätsthema in der Manifestdatei Ihrer App festlegen. Das Festlegen eines Aktivitätsthemas in der Manifestdatei Ihrer App ist der bevorzugte Ansatz, wenn die Statusleiste in Ihrer App immer ausgeblendet bleiben soll (obwohl Sie streng genommen das Thema auch programmatisch überschreiben könnten, wenn Sie das wollten). Zum Beispiel:
<application ... android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" > ...</application>
Die Vorteile der Verwendung eines Aktivitätsthemas sind folgende:
- Es ist einfacher zu pflegen und weniger fehleranfällig als das programmatische Setzen eines Flags.
- Es führt zu reibungsloseren UI-Übergängen, da das System über die Informationen verfügt, die es benötigt, um Ihre UI zu rendern, bevor die Hauptaktivität Ihrer Anwendung instanziiert wird.
Alternativ können Sie programmatisch WindowManager
Flags setzen.Dieser Ansatz macht es einfacher, die Statusleiste ein- und auszublenden, wenn der Benutzer mit Ihrer App interagiert:
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); } ...}
Wenn Sie WindowManager
-Flags setzen (entweder durch ein Aktivitätsthema oder programmatisch), bleiben die Flags in Kraft, bis Ihre App sie löscht.
Sie könnenFLAG_LAYOUT_IN_SCREEN
verwenden, um Ihr Aktivitätslayout so einzustellen, dass es denselben Bildschirmbereich verwendet, der verfügbar ist, wenn SieFLAG_FULLSCREEN
aktiviert haben. Dadurch wird verhindert, dass sich die Größe Ihres Inhalts ändert, wenn die Statusleiste ein- und ausgeblendet wird.
Statusleiste unter Android 4.1 und höher ausblenden
Sie können die Statusleiste unter Android 4.1 (API-Level 16) und höher ausblenden, indem Sie setSystemUiVisibility()
verwenden.setSystemUiVisibility()
setzt UI-Flags auf der Ebene der einzelnen Ansicht; diese Einstellungen werden auf der Fensterebene zusammengefasst. Die Verwendung von setSystemUiVisibility()
zum Setzen von UI-Flags gibt Ihnen eine genauere Kontrolle über die Systemleisten als die Verwendung von WindowManager
-Flags. Dieses Snippet blendet die Statusleiste aus:
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();
Beachten Sie Folgendes:
- Wenn die UI-Flags einmal gelöscht wurden (z. B. durch Navigieren weg von der Aktivität), muss Ihre App sie zurücksetzen, wenn Sie die Leisten wieder ausblenden möchten.Unter Reagieren auf Änderungen der UI-Sichtbarkeit erfahren Sie, wie Sie auf Änderungen der UI-Sichtbarkeit reagieren können, damit Ihre Anwendung entsprechend reagieren kann.
- Wo Sie die UI-Flags setzen, macht einen Unterschied. Wenn Sie die Systemleisten in der
onCreate()
Methode Ihrer Aktivität ausblenden und der Benutzer Home drückt, erscheinen die Systemleisten wieder. Wenn der Benutzer die Aktivität erneut öffnet, wirdonCreate()
nicht aufgerufen, so dass die Systemleisten sichtbar bleiben. Wenn Sie möchten, dass System-UI-Änderungen bestehen bleiben, während der Benutzer in und aus Ihrer Aktivität navigiert, setzen Sie UI-Flags inonResume()
oderonWindowFocusChanged()
. - Die Methode
setSystemUiVisibility()
hat nur dann einen Effekt, wenn die Ansicht, aus der Sie sie aufrufen, sichtbar ist. - Wegnavigieren von der Ansicht bewirkt, dass die mit
setSystemUiVisibility()
gesetzten Flags gelöscht werden.
Inhalt hinter der Statusleiste erscheinen lassen
Auf Android 4.1 und höher können Sie den Inhalt Ihrer Anwendung so einstellen, dass er hinter der Statusleiste angezeigt wird, so dass sich die Größe des Inhalts nicht ändert, wenn die Statusleiste ein- und ausgeblendet wird.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
Verwenden Sie dazuSYSTEM_UI_FLAG_LAYOUT_STABLE
, damit Ihre App ein stabiles Layout beibehält.
Wenn Sie diesen Ansatz verwenden, müssen Sie sicherstellen, dass kritische Teile der Benutzeroberfläche Ihrer App (z. B. die integrierten Steuerelemente in einer Kartenanwendung) nicht von Systemleisten verdeckt werden. Dies könnte Ihre Anwendung unbrauchbar machen. In den meisten Fällen können Sie dieses Problem lösen, indem Sie das Attribut android:fitsSystemWindows
in Ihre XML-Layoutdatei einfügen, das auftrue
gesetzt ist. Dadurch wird das Padding des übergeordneten ViewGroup
angepasst, um Platz für die Systemfenster zu lassen. Dies ist für die meisten Anwendungen ausreichend.
In einigen Fällen müssen Sie jedoch die Standardauffüllung ändern, um das gewünschte Layout für Ihre Anwendung zu erhalten. Um direkt zu beeinflussen, wie Ihr Inhalt im Verhältnis zu den Systemleisten angeordnet wird (die einen Raum einnehmen, der als „Content Insets“ des Fensters bekannt ist), überschreiben Sie fitSystemWindows(Rect insets)
.Die fitSystemWindows()
-Methode wird von der View-Hierarchie aufgerufen, wenn sich die Content Insets für ein Fenster geändert haben, damit das Fenster seinen Inhalt entsprechend anpassen kann. Wenn Sie diese Methode überschreiben, können Sie die Einsätze (und damit das Layout Ihrer Anwendung) nach Belieben handhaben.