Xamarin.Android Navigation Bar – Xamarin

Xamarin.Android Navigation Bar

Trong bài viết này

Android 4 introduced a new system user interface feature called a
Navigation Bar, which provides navigation controls on devices that
don’t include hardware buttons for Home, Back, and Menu.
The following screenshot shows the Navigation Bar from a Nexus Prime
device:

Example of an Android navigation bar

Several new flags are available that control the visibility of the Navigation
Bar and its controls, as well as the visibility of the System Bar that was
introduced in Android 3. The flags are defined in the Android.View.View class and are listed below:

  • SystemUiFlagVisible – Makes the Navigation Bar visible.
  • SystemUiFlagLowProfile – Dims out controls in the Navigation Bar.
  • SystemUiFlagHideNavigation – Hides the Navigation Bar.

These flags can be applied to any view in the view hierarchy by setting
the SystemUiVisibility property. If multiple views have this property
set, the system combines them with an OR operation and applies them so
long as the window in which the flags are set retains focus. When you
remove a view, any flags it has set will also be removed.

The following example shows a simple application where clicking any of the
buttons changes the SystemUiVisibility:

Screenshots demonstrating Visible, Low Profile, and Hidden SystemUiVisibility

The code to change the SystemUiVisibility sets the property on a
TextView from each button’s click event handler as shown below:

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;
}

Also, a SystemUiVisibility change raises a SystemUiVisibilityChange
event. Just like setting the SystemUiVisibility property, a handler
for the SystemUiVisibilityChange event can be registered for any view
in the hierarchy. For example, the code below uses the TextView
instance to register for the event:

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