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:

Ejemplo de una barra de navegación de Android

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:

Capturas de pantalla que muestran SystemUiVisibility visible, de perfil bajo y oculto

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