Otra herramienta útil para poner en su bolsa de trucos de interfaz de usuario de Android es la gestión inteligente de la persistencia de la barra de acciones. Aquí está el cómo.

    La introducción del widget de la barra de acción de Honeycomb contribuyó en gran medida a mejorar la experiencia del usuario en los dispositivos Android. Sin embargo, el hecho es que los usuarios quieren hacer mucho en una pantalla que en la mayoría de los casos mide menos de cinco pulgadas de alto. Google validó la necesidad periódica de una aplicación para utilizar toda la pantalla eficientemente con la introducción del modo inmersivo en KitKat.

    En ocasiones me he dado cuenta de que decidir si una aplicación debe ofrecer al usuario una experiencia totalmente inmersiva o un diseño de navegación persistente más tradicional no siempre es cuestión de una cosa o de otra. Hay momentos en los que la mejor opción es presentar inteligentemente la barra de acciones basada en los gestos del usuario. Un buen ejemplo es cuando se desplaza por una lista en la que la barra de acciones no tiene significado contextual. El siguiente video demuestra lo que quiero decir.

    Lograr el mismo tipo de barra de acción reactiva en tu propia aplicación no es increíblemente difícil. El siguiente código le mostrará cómo hacerlo. Siéntase libre de seguir, o descargar e importar todo el proyecto directamente a Eclipse.

    1. Comience un nuevo proyecto Android en Eclipse. Objetivo SDK 14 (ICS) o superior.

    2. Para el propósito de esta demostración he incluido tres imágenes grandes en mi carpeta /res/drawable-xhdpi tituladas apropiadamente.

    3. En la carpeta /res/layout he modificado activity_main.xml para incluir una vista de desplazamiento que envuelve un diseño lineal. La disposición lineal incluye nuestras tres imágenes. Observe el acolchado aplicado en la parte superior de la disposición lineal. Así es como podemos acceder a la altura de nuestra barra de acción en tiempo de diseño.

    activity_main.xml<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingTop="?android:attr/actionBarSize" android:orientation="vertical"> <ImageView android:id="@+id/first_item" android:layout_margin="20dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/number_1"/> <ImageView android:layoft_margin="20dp" ylayout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/number_2"/> <ImageView android:layout_margin="20dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/number_3"/> </LinearLayout> </ScrollView>

    4. Con nuestros recursos en su lugar ahora estamos listos para escribir algo de código. Mientras que la ocultación y visualización de la barra de acción ocurre en el handler de on scroll changed, la magia ocurre en nuestro on create override. El primero es la adición de la bandera FEATURE_ACTION_BAR_BAR_OVERLAY a la ventana principal. Esto evita que el padre o la madre coloque a los niños cada vez que nos escondemos y mostramos la barra de acciones. La segunda llamada a destacar es la de alcanzar el tamaño de la barra de acciones a través del tema aplicado. Este es el equivalente en Java de: ?android:attr/actionBarSize.

    MainActivity.javapackage com.authorwjf.reactiveactionbar;import android.os.Bundle;import android.app.ActionBar;import android.app.Activity;import android.content.res.TypedArray;import android.view.Menu;import android.view.ViewTreeObserver;import android.view.Window;import android.widget.ScrollView;la clase pública MainActivity amplía el alcance de las actividades ViewTreeObserver.OnScrollChangedListener { private float mActionBarHeight; private ActionBar mActionBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow(.requestFeature(Window.FEATURE_ACTION_BAR_BAR_OVERLAY); setContentView(R.layout.activity_main); final TypedArray styledAttributes = getTheme(.obtainStyledAttributes( new int[] { android.R.attr.actionBarSize }); mActionBarHeight = styledAttributes.getDimension(0, 0); styledAttributes.recycle(); mActionBar = getActionBar(); ((ScrollView)findViewById(R.id.parent).getViewTreeObserver(.addOnScrollChangedListener(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater(.inflate(R.menu.main, menu); return true; } @Override public void onScrollChanged() { float y = ((ScrollView)findViewById(R.id.parent).getScrollY(); if (y >= mActionBarHeight && mActionBar.isShowing()) { mActionBar.hide(); } else if ( y===0 &&& !mActionBar.isShowing()) { mActionBar.show(); } }}

    Eso es todo. Puedes cargar la aplicación demo en un dispositivo o emulador y comprobarlo por ti mismo.

    Me estoy repitiendo, pero ten en cuenta que esta convención rompe completamente la experiencia del usuario si tu barra de acción contiene una opción contextual. Por ejemplo, si tienes una opción de eliminar en tu barra de acciones, no puedes ocultarla muy bien, ya que el usuario puede necesitar eliminar una opción en la parte inferior de la lista. Sin embargo, cuando se considera cuidadosamente y se usa con moderación, considero que la gestión inteligente de la persistencia de la barra de acciones es una herramienta útil en mi bolsa de trucos de interfaz de usuario.