Xamarin.Android-Navigationsleiste

Mit Android 4 wurde eine neue Systembenutzeroberfläche namens Navigationsleiste eingeführt, die Navigationssteuerelemente auf Geräten ohne Hardwareschaltflächen für Start, Zurück und Menü bereitstellt. Der folgende Screenshot zeigt die Navigationsleiste eines Nexus Prime-Geräts:

Beispiel für eine Android-Navigationsleiste

Es sind mehrere neue Flags verfügbar, die die Sichtbarkeit der Navigationsleiste und ihrer Steuerelemente sowie die Sichtbarkeit der Systemleiste steuern, die in Android 3 eingeführt wurde. Die Flags sind in der Android.View.View -Klasse definiert und werden unten aufgeführt:

  • SystemUiFlagVisible – Macht die Navigationsleiste sichtbar.
  • SystemUiFlagLowProfile – Blendet Steuerelemente in der Navigationsleiste aus.
  • SystemUiFlagHideNavigation – Blendet die Navigationsleiste aus.

Diese Flags können auf jede Ansicht in der Ansichtshierarchie angewendet werden, indem die SystemUiVisibility -Eigenschaft festgelegt wird. Wenn diese Eigenschaft für mehrere Ansichten festgelegt ist, kombiniert das System sie mit einem OR-Vorgang und wendet sie an, solange das Fenster, in dem die Flags festgelegt sind, den Fokus behält. Wenn Sie eine Ansicht entfernen, werden auch alle von ihr festgelegten Flags entfernt.

Das folgende Beispiel zeigt eine einfache Anwendung, bei der durch Klicken auf eine der Schaltflächen die geändert wird SystemUiVisibility:

Screenshots zur Veranschaulichung von Visible, Low Profile und Hidden SystemUiVisibility

Der Code zum Ändern der SystemUiVisibility legt die -Eigenschaft für einen TextView aus dem Klickereignishandler jeder Schaltfläche fest, wie unten gezeigt:

var tv = FindViewById<TextView> (Resource.Id.systemUiFlagTextView);
var lowProfileButton = FindViewById<Button>(Resource.Id.lowProfileButton);
var hideNavButton = FindViewById<Button> (Resource.Id.hideNavigation);
var visibleButton = FindViewById<Button> (Resource.Id.visibleButton);

lowProfileButton.Click += delegate {
    tv.SystemUiVisibility =
        (StatusBarVisibility)View.SystemUiFlagLowProfile;
};

hideNavButton.Click += delegate {
    tv.SystemUiVisibility =
       (StatusBarVisibility)View.SystemUiFlagHideNavigation;        
};

visibleButton.Click += delegate {
    tv.SystemUiVisibility = (StatusBarVisibility)View.SystemUiFlagVisible;
}

Außerdem löst eine SystemUiVisibility Änderung ein -Ereignis aus SystemUiVisibilityChange . Genau wie das Festlegen der SystemUiVisibility -Eigenschaft kann ein Handler für das SystemUiVisibilityChange Ereignis für jede Ansicht in der Hierarchie registriert werden. Der folgende Code verwendet beispielsweise die TextView instance, um sich für das Ereignis zu registrieren:

tv.SystemUiVisibilityChange +=
  delegate(object sender, View.SystemUiVisibilityChangeEventArgs e) {
        tv.Text = String.Format ("Visibility = {0}", e.Visibility);
  };