X

Añadir Botones de Acción

La action bar (barra de acciones) te permite añadir botones de acción para las acciones más importantes relacionadas con el contexto actual de la app. Aparecen directamente en la action bar con un icono y/o texto que se conocen como action buttons (botones de acción). Las acciones que no tienen espacio para aparecer dentro de la action bar o no son lo suficientemente importantes se encuentran ocultas dentro del menú overflow.

Figura 1. Una action bar con un botón de acción de Búsqueda y el botón del menú overflow, el cual revelará otras acciones.

Especificar Acciones en XML

Todos los action buttons y otros elementos que se encuentran disponibles dentro del menú overflow se pueden definir en un recurso de menú XML. Para añadir acciones a la action bar, crea un nuevo archivo XML en el directorio de tu proyecto res/menu.

Añade un elemento <item> para cada elemento que quieras incluir en la action bar. Por ejemplo:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <!-- Search, should appear as action button -->
    <item android:id="@+id/action_search"
          android:icon="@drawable/ic_action_search"
          android:title="@string/action_search"
          android:showAsAction="ifRoom" />
    <!-- Settings, should always be in the overflow -->
    <item android:id="@+id/action_settings"
          android:title="@string/action_settings"
          android:showAsAction="never" />
</menu>

Esto declara que la acción Búsqueda debería aparecer como un action button siempre y cuando haya espacio (room) disponible en la action bar, pero la acción Ajustes debería siempre aparecer en el menú overflow. (Por defecto, todas las acciones aparecen en el menú overflow, pero es una buena práctica especificar para cada acción en tu diseño que debería aparecer en la action bar si hay espacio y que en el menú overflow).

Descargar los iconos de la action bar
Visita las guías de diseño relacionadas con la iconografía y descarga los iconos de la action bar.

El atributo icon requiere un ID de recurso para una imagen. El nombre que sigue a @drawable/ debe ser el nombre de la imagen bitmap que has guardado en el directorio de tu proyecto res/drawable/. Por ejemplo, @drawable/ic_action_search se refiere al archivo ic_action_search.png. Por otro lado, el atributo tittle utiliza un recurso string que se define en el archivo XML en res/values/, como se mostró en Crear una Interfaz de Usuario.

Nota: Cuando crees iconos y otras imágenes bitmap para tu app, es importante que proporciones múltiples versiones que estén optimizadas para cada densidad de pantalla de los diferentes teléfonos o tablets. Para más información, visita la lección Soporte de Diferentes Pantallas.

Si estás utilizando la Support Library en tu app para que sea compatible con versiones inferiores a Android 2.1, el atributo showAsAction no se encuentra disponible utilizando el prefijo android:. En su lugar, debes definir tu propio nombre (namespace) y utilizar el mismo como prefijo del atributo. (Un nombre de prefijo XML personalizado debería basarse en el nombre de tu app, pero puedes utilizar cualquier nombre que quieras si solo está accesible dentro del archivo en el cual lo estás declarando. Por ejemplo:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
    <!-- Search, should appear as action button -->
    <item android:id="@+id/action_search"
          android:icon="@drawable/ic_action_search"
          android:title="@string/action_search"
          yourapp:showAsAction="ifRoom"  />
    ...
</menu>

Añadir las Acciones a la Action Bar

Para colocar los elementos del menú en la Action Bar, implementa el método onCreateOptionsMenu() en tu actividad para inflar el recurso del menú dentro del objeto Menu. Por ejemplo:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu items for use in the action bar
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_activity_actions, menu);
    return super.onCreateOptionsMenu(menu);
}

Respuesta de los Botones de Acción

Cuando el usuario presiona uno de los botones de acción u otro elemento en el menú overflow, el sistema llama al método de tu actividad onOptionsItemSelected(). Cuando implementes este método, llama a getItemId() en el MenuItem dado para determinar que elemento ha sido presionado – el ID devuelto debe coincidir con el valor que tu declaraste en el atributo android:id del elemento <item> correspondiente.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle presses on the action bar items
    switch (item.getItemId()) {
        case R.id.action_search:
            openSearch();
            return true;
        case R.id.action_settings:
            openSettings();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

Añadir el Botón Atrás en Actividades de Nivel Inferior

Todas las pantallas en tu app, las que no son la principal, o en otras palabras, las actividades que no son la pantalla “inicio”, deberían ofrecer al usuario una forma de navegar al a pantalla padre en la jerarquía de la app al presionar el botón Atrás en la action bar.

Cuando estés ejecutando Android 4.1 (API 16) o una versión superior, o cuando estés usando ActionBarActivity o la actualizada AppCompatActivity, de la Support Library, optimizar el comportamiento del botón Atrás es tan sencillo como declarar la actividad padre en tu archivo manifest y, además, habilitar dicho botón en la action bar.

Figura 2. Botón Atrás en la app Gmail de Google.

Por ejemplo, puedes declarar la actividad padre en el archivo manifest del siguiente modo:

<application ... >
    ...
    <!-- The main/home activity (it has no parent activity) -->
    <activity
        android:name="com.example.myfirstapp.MainActivity" ...>
        ...
    </activity>
    <!-- A child of the main activity -->
    <activity
        android:name="com.example.myfirstapp.DisplayMessageActivity"
        android:label="@string/title_activity_display_message"
        android:parentActivityName="com.example.myfirstapp.MainActivity" >
        <!-- Parent activity meta-data to support 4.0 and lower -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.myfirstapp.MainActivity" />
    </activity>
</application>

Acto seguido, puedes activar el botón Atrás llamando al método setDisplayHomeAsUpEnabled():

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_displaymessage);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    // If your minSdkVersion is 11 or higher, instead use:
    // getActionBar().setDisplayHomeAsUpEnabled(true);
}

El sistema ahora sabe que la actividad MainActivity es la actividad padre, así que cuando el usuario presione el botón Atrás en una actividad de nivel inferior, el sistema navegará a la actividad apropiada, es decir, no necesitas indicar manualmente que debe hacer el botón Atrás en cada una de las actividades de tu app.

Para más información sobre este tipo de navegación, visita Navegación.

Puedes ver más información sobre Añadir Botones de Acción en la página oficial de Google en inglés pulsando aquí.

Los comentarios de Disqus están cargando....