Partilhar via


ActionBar para Xamarin.Android

Ao usar TabActivityo , o código para criar os ícones da guia não tem efeito quando executado na estrutura do Android 4.0. Embora funcionalmente funcione como nas versões do Android anteriores à 2.3, a TabActivity classe em si foi preterida na 4.0. Foi introduzida uma nova maneira de criar uma interface com guias que usa a Barra de Ação, que discutiremos a seguir.

Guias da Barra de Ação

A Barra de Ação inclui suporte para adicionar interfaces com guias no Android 4.0. A captura de tela a seguir mostra um exemplo de tal interface.

Captura de tela do aplicativo em execução em um emulador; Duas guias são mostradas

Para criar guias na Barra de Ação, primeiro precisamos definir sua NavigationMode propriedade para oferecer suporte a guias. No Android 4, uma ActionBar propriedade está disponível na classe Activity, que podemos usar para definir o NavigationMode seguinte:

this.ActionBar.NavigationMode = ActionBarNavigationMode.Tabs;

Feito isso, podemos criar uma guia chamando o NewTab método na Barra de Ação. Com esta ocorrência de aba, podemos chamar os métodos e SetIcon para definir o SetText texto e o ícone do rótulo da guia, essas chamadas são feitas em ordem no código mostrado abaixo:

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

Antes de podermos adicionar a guia, no entanto, precisamos manipular o TabSelected evento. Nesse manipulador, podemos criar o conteúdo para a guia. As guias da Barra de Ação são projetadas para funcionar com Fragmentos, que são classes que representam uma parte da interface do usuário em uma Atividade. Para este exemplo, a exibição do Fragmento contém um único TextView, que inflamos em nossa Fragment subclasse como este:

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

O argumento de evento passado no TabSelected evento é do tipo TabEventArgs, que inclui uma FragmentTransaction propriedade que podemos usar para adicionar o fragmento conforme mostrado abaixo:

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

Finalmente, podemos adicionar a guia à Barra de Ação chamando o AddTab método conforme mostrado neste código:

this.ActionBar.AddTab (tab);

Para obter o exemplo completo, consulte o projeto HelloTabsICS no código de exemplo deste documento.

ShareActionProvider

A ShareActionProvider classe permite que uma ação de compartilhamento ocorra a partir de uma Barra de Ação. Ele se encarrega de criar um modo de exibição de ação com uma lista de aplicativos que podem lidar com uma intenção de compartilhamento e mantém um histórico dos aplicativos usados anteriormente para fácil acesso a eles posteriormente a partir da Barra de Ação. Isso permite que os aplicativos compartilhem dados por meio de uma experiência de usuário consistente em todo o Android.

Exemplo de compartilhamento de imagens

Por exemplo, abaixo está uma captura de tela de uma Barra de Ação com um item de menu para compartilhar uma imagem. Quando o usuário toca no item de menu na Barra de Ação, o ShareActionProvider carrega o aplicativo para manipular uma Intenção associada ao ShareActionProvider. Neste exemplo, o aplicativo de mensagens foi usado anteriormente, portanto, ele é apresentado na Barra de Ação.

Captura de tela do ícone do aplicativo de mensagens na Barra de Ação

Quando o usuário clica no item na Barra de Ação, o aplicativo de mensagens que contém a imagem compartilhada é iniciado, conforme mostrado abaixo:

Captura de tela do aplicativo de mensagens exibindo imagem de macaco

Especificando a ação Classe do provedor

Para usar o ShareActionProvider, defina o android:actionProviderClass atributo em um item de menu no XML para o menu da Barra de Ações da seguinte maneira:

<?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>

Inflando o Menu

Para inflar o menu, substituímos OnCreateOptionsMenu na subclasse Atividade. Uma vez que temos uma referência ao menu, podemos obter o ShareActionProvider da propriedade do ActionProvider item de menu e, em seguida, usar o método SetShareIntent para definir o ShareActionProvider's Intent, como mostrado abaixo:

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

Criando a intenção

O ShareActionProvider usará a Intent, passada para o SetShareIntent método no código acima, para iniciar a Atividade apropriada. Nesse caso, criamos uma Intenção de enviar uma imagem usando o seguinte código:

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

A imagem no exemplo de código acima é incluída como um ativo com o aplicativo e copiada para um local acessível publicamente quando a Atividade é criada, portanto, ela será acessível a outros aplicativos, como o aplicativo de mensagens. O código de exemplo que acompanha este artigo contém a fonte completa deste exemplo, ilustrando seu uso.