ActionBar para Xamarin.Android
Ao usar TabActivity
o , 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.
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.
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:
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.