Xamarin.Android Navigation Bar
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:
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
:
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);
};