Sdílet prostřednictvím


Panel akcí pro Xamarin.Android

Při použití TabActivitykó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í.

Snímek obrazovky aplikace spuštěné v emulátoru Zobrazí se dvě karty.

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í.

Snímek obrazovky s ikonou aplikace zasílání zpráv 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:

Snímek obrazovky s aplikací pro zasílání zpráv zobrazující obrázek opice

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 ShareActionProviderzá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í.