ActionBarActionBar

Información generalOverview

Cuando se usa TabActivity, el código para crear los iconos de ficha no tiene ningún efecto cuando se ejecuta en el marco de trabajo de Android 4.0.When using TabActivity, the code to create the tab icons has no effect when run against the Android 4.0 framework. Aunque funcionalmente también funciona como lo hacía en versiones de Android anteriores a 2.3, la TabActivity propia clase ha quedado obsoleto en 4.0.Although functionally it works as it did in versions of Android prior to 2.3, the TabActivity class itself has been deprecated in 4.0. Se ha introducido una nueva forma de crear una interfaz con fichas que utiliza la barra de acciones, lo que hablaremos a continuación.A new way to create a tabbed interface has been introduced that uses the Action Bar, which we'll discuss next.

Pestañas de la barra de accionesAction Bar Tabs

La barra de acciones incluye compatibilidad para agregar interfaces con pestañas en Android 4.0.The Action Bar includes support for adding tabbed interfaces in Android 4.0. Captura de pantalla siguiente muestra un ejemplo de dicha interfaz.The following screenshot shows an example of such an interface.

Captura de pantalla de la aplicación que se ejecuta en un emulador; se muestran dos pestañasScreenshot of app running in an emulator; two tabs are shown

Para crear pestañas en la barra de acciones, primero es necesario establecer su NavigationMode propiedad para admitir las pestañas.To create tabs in the Action Bar, we first need to set its NavigationMode property to support tabs. En Android 4 un ActionBar propiedad está disponible en la clase de actividad, podemos usar para establecer el NavigationMode similar al siguiente:In Android 4, an ActionBar property is available on the Activity class, which we can use to set the NavigationMode like this:

this.ActionBar.NavigationMode = ActionBarNavigationMode.Tabs;

Una vez hecho esto, podemos crear una pestaña mediante una llamada a la NewTab método en la barra de acciones.Once this is done, we can create a tab by calling the NewTab method on the Action Bar. Con esta instancia de la ficha, podemos llamar a la SetText y SetIcon métodos para establecer la pestaña texto de etiqueta y el icono; estas llamadas se realizan en el orden en el código se muestra a continuación:With this tab instance, we can call the SetText and SetIcon methods to set the tab's label text and icon; these calls are made in order in the code shown below:

var tab = this.ActionBar.NewTab ();
tab.SetText (tabText);
tab.SetIcon (Resource.Drawable.ic_tab_white);

Antes de que podemos agregar la pestaña sin embargo, se debe controlar la TabSelected eventos.Before we can add the tab however, we need to handle the TabSelected event. En este controlador, podemos crear el contenido de la ficha. Las fichas de la barra de acciones están diseñadas para trabajar con fragmentos, que son clases que representan una parte de la interfaz de usuario en una actividad.In this handler, we can create the content for the tab. Action Bar tabs are designed to work with Fragments, which are classes that represent a portion of the user interface in an Activity. En este ejemplo, la vista del fragmento contiene un único TextView, que se infla en nuestra Fragment subclase similar al siguiente:For this example, the Fragment's view contains a single TextView, which we inflate in our Fragment subclass like this:

class SampleTabFragment: Fragment
{           
    public override View OnCreateView (LayoutInflater inflater,
        ViewGroup container, Bundle savedInstanceState)
    {
        base.OnCreateView (inflater, container, savedInstanceState);

        var view = inflater.Inflate (
            Resource.Layout.Tab, container, false);

        var sampleTextView =
            view.FindViewById<TextView> (Resource.Id.sampleTextView);            
        sampleTextView.Text = "sample fragment text";


        return view;
    }
}

El argumento de evento que se pasa en el TabSelected evento es de tipo TabEventArgs, que incluye un FragmentTransaction propiedad que podemos usar para agregar el fragmento tal como se muestra a continuación:The event argument passed in the TabSelected event is of type TabEventArgs, which includes a FragmentTransaction property that we can use to add the fragment as shown below:

tab.TabSelected += delegate(object sender, ActionBar.TabEventArgs e) {             
    e.FragmentTransaction.Add (Resource.Id.fragmentContainer,
        new SampleTabFragment ());
};

Por último, podemos agregar la pestaña a la barra de acciones mediante una llamada a la AddTab método tal como se muestra en este código:Finally, we can add the tab to the Action Bar by calling the AddTab method as shown in this code:

this.ActionBar.AddTab (tab);

Para obtener un ejemplo completo, vea el HelloTabsICS proyecto en el código de ejemplo para este documento.For the complete example, see the HelloTabsICS project in the sample code for this document.

ShareActionProviderShareActionProvider

La ShareActionProvider clase permite una acción de uso compartida que tenga lugar de una barra de acciones.The ShareActionProvider class enables a sharing action to take place from an Action Bar. Se encarga de crear una vista de acción con una lista de aplicaciones que puede controlar un intento para compartir y mantiene un historial de las aplicaciones usadas anteriormente para facilitar el acceso a ellos más adelante desde la barra de acciones.It takes care of creating an action view with a list of apps that can handle a sharing Intent and keeps a history of the previously used applications for easy access to them later from the Action Bar. Esto permite que las aplicaciones compartir datos a través de una experiencia de usuario que sea coherente en Android.This allows applications to share data via a user experience that's consistent throughout Android.

Ejemplo de uso compartido de imagenImage Sharing Example

Por ejemplo, a continuación es una captura de pantalla de una barra de acción con un elemento de menú para compartir una imagen (procedente del ShareActionProvider ejemplo).For example, below is a screenshot of an Action Bar with a menu item to share an image (taken from the ShareActionProvider sample). Cuando el usuario puntea el elemento de menú en la barra de acciones, el ShareActionProvider carga la aplicación para controlar una intención que está asociada el ShareActionProvider.When the user taps the menu item on the Action Bar, the ShareActionProvider loads the application to handle an Intent that is associated with the ShareActionProvider. En este ejemplo, la aplicación de mensajería ya se utilizó anteriormente, por lo que se presenta en la barra de acciones.In this example, the messaging application has been previously used, so it is presented on the Action Bar.

Captura de pantalla del icono de la aplicación en la barra de acciones de mensajeríaScreenshot of messaging application icon in the Action Bar

Cuando el usuario hace clic en el elemento de la barra de acciones, se inicia la aplicación de mensajería que contiene la imagen compartida, como se muestra a continuación:When the user clicks on the item in the Action Bar, the messaging app that contains the shared image is launched, as shown below:

Captura de pantalla de la aplicación de mensajería Mostrar imagen monkeyScreenshot of messaging app displaying monkey image

Especifica la acción de la clase de proveedorSpecifying the action Provider Class

Para usar el ShareActionProvider, establezca el android:actionProviderClass atributo en un elemento de menú en el XML para el menú de la barra de acción como sigue:To use the ShareActionProvider, set the android:actionProviderClass attribute on a menu item in the XML for the Action Bar's menu as follows:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:id="@+id/shareMenuItem"
      android:showAsAction="always"
      android:title="@string/sharePicture"
      android:actionProviderClass="android.widget.ShareActionProvider" />
</menu>

El menú que inflaInflating the Menu

Para aumentar el menú, se muestra cómo reemplazar OnCreateOptionsMenu en la subclase de actividad.To inflate the menu, we override OnCreateOptionsMenu in the Activity subclass. Una vez que tenemos una referencia al menú, podemos obtener el ShareActionProvider desde el ActionProvider propiedad del elemento de menú y, a continuación, use el método SetShareIntent para establecer el ShareActionProviderde intención, tal como se muestra a continuación:Once we have a reference to the menu, we can get the ShareActionProvider from the ActionProvider property of the menu item and then use the SetShareIntent method to set the ShareActionProvider's Intent, as shown below:

public override bool OnCreateOptionsMenu (IMenu menu)
{
    MenuInflater.Inflate (Resource.Menu.ActionBarMenu, menu);       

    var shareMenuItem = menu.FindItem (Resource.Id.shareMenuItem);           
    var shareActionProvider =
       (ShareActionProvider)shareMenuItem.ActionProvider;
    shareActionProvider.SetShareIntent (CreateIntent ());
}

Creación de la intenciónCreating the Intent

El ShareActionProvider usará la intención, pasa a la SetShareIntent método en el código anterior, para iniciar la actividad apropiada.The ShareActionProvider will use the Intent, passed to the SetShareIntent method in the above code, to launch the appropriate Activity. En este caso, creamos una intención para enviar una imagen mediante el código siguiente:In this case we create an Intent to send an image by using the following code:

Intent CreateIntent ()
{  
    var sendPictureIntent = new Intent (Intent.ActionSend);
    sendPictureIntent.SetType ("image/*");
    var uri = Android.Net.Uri.FromFile (GetFileStreamPath ("monkey.png"));          
    sendPictureIntent.PutExtra (Intent.ExtraStream, uri);
    return sendPictureIntent;
}

La imagen en el ejemplo de código anterior se incluye como un recurso con la aplicación y copia en una ubicación públicamente accesible cuando se crea la actividad, por lo que estarán disponibles para otras aplicaciones, como la aplicación de mensajería.The image in the code example above is included as an asset with the application and copied to a publicly accessible location when the Activity is created, so it will be accessible to other applications, such as the messaging app. El código de ejemplo que acompaña este artículo contiene el código fuente completo de este ejemplo, que muestra su uso.The sample code that accompanies this article contains the full source of this example, illustrating its use.