Panel akcí pro Xamarin.Android
Při použití TabActivity
kódu pro vytvoření ikon karet nemá při spuštění na platformě Android 4.0 žádný vliv. I když funguje funkčně stejně jako ve verzích Androidu starších než 2.3, TabActivity
samotná třída byla vyřazena ve verzi 4.0. Byl zaveden nový způsob vytvoření rozhraní s kartami, který používá panel akcí, který probereme dále.
Karty panelu akcí
Panel akcí obsahuje podporu pro přidávání rozhraní s kartami v Androidu 4.0. Následující snímek obrazovky ukazuje příklad takového rozhraní.
Abychom mohli vytvářet karty na panelu akcí, musíme nejprve nastavit jeho NavigationMode
vlastnost na podporu karet. V Androidu 4 ActionBar
je vlastnost k dispozici ve třídě Aktivita, kterou můžeme použít k nastavení NavigationMode
tohoto typu:
this.ActionBar.NavigationMode = ActionBarNavigationMode.Tabs;
Jakmile to uděláte, můžeme vytvořit kartu voláním NewTab
metody na panelu akcí. V této instanci karty můžeme volat SetText
a SetIcon
metody pro nastavení textu a ikony popisku karty. Tato volání se provádějí v pořadí v kódu uvedeném níže:
var tab = this.ActionBar.NewTab ();
tab.SetText (tabText);
tab.SetIcon (Resource.Drawable.ic_tab_white);
Než ale můžeme přidat kartu, musíme zpracovat TabSelected
událost. V této obslužné rutině můžeme vytvořit obsah karty. Karty panelu akcí jsou navrženy tak, aby fungovaly s fragmenty, což jsou třídy, které představují část uživatelského rozhraní v aktivitě. V tomto příkladu obsahuje zobrazení fragmentu jeden TextView
, který nafoukneme v podtřídě Fragment
takto:
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;
}
}
Argument události předaný v TabSelected
události je typu TabEventArgs
, který obsahuje FragmentTransaction
vlastnost, kterou můžeme použít k přidání fragmentu, jak je znázorněno níže:
tab.TabSelected += delegate(object sender, ActionBar.TabEventArgs e) {
e.FragmentTransaction.Add (Resource.Id.fragmentContainer,
new SampleTabFragment ());
};
Nakonec můžeme kartu přidat na panel akcí voláním AddTab
metody, jak je znázorněno v tomto kódu:
this.ActionBar.AddTab (tab);
Úplný příklad najdete v projektu HelloTabsICS v ukázkovém kódu pro tento dokument.
ShareActionProvider
Třída ShareActionProvider
umožňuje akci sdílení provést z panelu akcí. Postará se o vytvoření zobrazení akcí se seznamem aplikací, které můžou zpracovat záměr sdílení, a udržuje historii dříve použitých aplikací, abyste k nim později mohli snadno přistupovat z panelu akcí. To umožňuje aplikacím sdílet data prostřednictvím uživatelského prostředí, které je konzistentní v celém Androidu.
Příklad sdílení obrázků
Níže je například snímek obrazovky panelu akcí s položkou nabídky pro sdílení obrázku. Když uživatel klepne na položku nabídky na panelu akcí, ShareActionProvider načte aplikaci pro zpracování záměru, který je přidružený k objektu ShareActionProvider
. V tomto příkladu byla aplikace pro zasílání zpráv použita dříve, takže se zobrazí na panelu akcí.
Když uživatel klikne na položku na panelu akcí, spustí se aplikace pro zasílání zpráv obsahující sdílený obrázek, jak je znázorněno níže:
Určení třídy zprostředkovatele akce
Chcete-li použít ShareActionProvider
, nastavte android:actionProviderClass
atribut v položce nabídky XML pro nabídku panelu akcí následujícím způsobem:
<?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>
Nafouknutí nabídky
Pokud chcete nabídku nafouknout, přepíšeme OnCreateOptionsMenu
ji v podtřídě aktivity. Jakmile máme odkaz na nabídku, můžeme získat ShareActionProvider
z ActionProvider
vlastnosti položky nabídky a pak použít SetShareIntent metoda nastavit ShareActionProvider
záměr 's Intent, jak je znázorněno níže:
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 ());
}
Vytvoření záměru
Použije ShareActionProvider
záměr předaný SetShareIntent
metodě ve výše uvedeném kódu ke spuštění příslušné aktivity. V tomto případě vytvoříme záměr odeslat obrázek pomocí následujícího kódu:
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;
}
Obrázek ve výše uvedeném příkladu kódu je součástí prostředku aplikace a při vytváření aktivity se zkopíruje do veřejně přístupného umístění, takže bude přístupný pro jiné aplikace, jako je například aplikace pro zasílání zpráv. Vzorový kód, který doprovází tento článek, obsahuje úplný zdroj tohoto příkladu, který ilustruje jeho použití.