Barra de navegación de Xamarin.Android
Android 4 introdujo una nueva característica de interfaz de usuario del sistema denominada Barra de navegación, que proporciona controles de navegación en dispositivos que no incluyen botones de hardware para Inicio, Atrásy Menú. En la siguiente captura de pantalla se muestra la barra de navegación desde un dispositivo Nexus Prime:
Hay varias marcas nuevas disponibles que controlan la visibilidad de la barra de navegación y sus controles, así como la visibilidad de la barra del sistema que se introdujo en Android 3. Las marcas se definen en la clase Android.View.View
y se enumeran a continuación:
SystemUiFlagVisible
: hace que la barra de navegación sea visible.SystemUiFlagLowProfile
: atenúa los controles en la barra de navegación.SystemUiFlagHideNavigation
: oculta la barra de navegación.
Estas marcas se pueden aplicar a cualquier vista de la jerarquía de vistas estableciendo la propiedad SystemUiVisibility
. Si varias vistas tienen establecida esta propiedad, el sistema los combina con una operación OR y los aplica siempre que la ventana en la que se establezcan las marcas conserve el foco. Al quitar una vista, también se quitarán las marcas que haya establecido.
En el siguiente ejemplo se muestra una aplicación sencilla en la que hacer clic en cualquiera de los botones cambia el SystemUiVisibility
:
El código para cambiar el SystemUiVisibility
establece la propiedad en un TextView
desde el controlador de eventos de clic de cada botón, como se muestra a continuación:
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;
}
Además, un cambio de SystemUiVisibility
genera un evento SystemUiVisibilityChange
. Al igual que establecer la propiedad SystemUiVisibility
, se puede registrar un controlador para el evento SystemUiVisibilityChange
para cualquier vista de la jerarquía. Por ejemplo, el siguiente código usa la instancia TextView
para registrarse para el evento:
tv.SystemUiVisibilityChange +=
delegate(object sender, View.SystemUiVisibilityChangeEventArgs e) {
tv.Text = String.Format ("Visibility = {0}", e.Visibility);
};