Udostępnij za pośrednictwem


ActionBar dla platformy Xamarin.Android

W przypadku korzystania z programu TabActivitykod do tworzenia ikon kart nie ma wpływu podczas uruchamiania w środowisku systemu Android 4.0. Mimo że funkcjonalnie działa tak jak w wersjach systemu Android wcześniejszych niż 2.3, TabActivity sama klasa została uznana za przestarzałą w wersji 4.0. Wprowadzono nowy sposób tworzenia interfejsu z kartami, który używa paska akcji, który omówimy w następnej kolejności.

Karty paska akcji

Pasek akcji zawiera obsługę dodawania interfejsów z kartami w systemie Android 4.0. Poniższy zrzut ekranu przedstawia przykład takiego interfejsu.

Zrzut ekranu przedstawiający aplikację uruchomioną w emulatorze; Wyświetlane są dwie karty

Aby utworzyć karty na pasku akcji, najpierw musimy ustawić jej NavigationMode właściwość tak, aby obsługiwała karty. W systemie Android 4 ActionBar właściwość jest dostępna w klasie Activity, której możemy użyć do ustawienia NavigationMode w następujący sposób:

this.ActionBar.NavigationMode = ActionBarNavigationMode.Tabs;

Po wykonaniu tej czynności możemy utworzyć kartę, wywołując NewTab metodę na pasku akcji. Za pomocą tego wystąpienia karty możemy wywołać SetText metody i SetIcon w celu ustawienia tekstu i ikony etykiety karty. Te wywołania są wykonywane w kolejności w kodzie pokazanym poniżej:

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

Zanim jednak będziemy mogli dodać kartę, musimy obsłużyć TabSelected zdarzenie. W tym programie obsługi można utworzyć zawartość karty. Karty paska akcji są przeznaczone do pracy z fragmentami, które są klasami reprezentującymi część interfejsu użytkownika w działaniu. W tym przykładzie widok fragmentu zawiera jeden TextViewelement , który zawyżamy w naszej Fragment podklasie w następujący sposób:

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 zdarzenia przekazany w TabSelected zdarzeniu jest typu TabEventArgs, który zawiera FragmentTransaction właściwość, której możemy użyć do dodania fragmentu, jak pokazano poniżej:

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

Na koniec możemy dodać kartę na pasku akcji, wywołując metodę AddTab , jak pokazano w tym kodzie:

this.ActionBar.AddTab (tab);

Pełny przykład można znaleźć w projekcie HelloTabsICS w przykładowym kodzie tego dokumentu.

ShareActionProvider

Klasa ShareActionProvider umożliwia wykonywanie akcji udostępniania na pasku akcji. Zajmuje się tworzeniem widoku akcji z listą aplikacji, które mogą obsługiwać intencję udostępniania i przechowuje historię poprzednio używanych aplikacji w celu łatwego dostępu do nich później z paska akcji. Dzięki temu aplikacje mogą udostępniać dane za pośrednictwem środowiska użytkownika, które jest spójne w całym systemie Android.

Przykład udostępniania obrazów

Na przykład poniżej znajduje się zrzut ekranu przedstawiający pasek akcji z elementem menu umożliwiającym udostępnianie obrazu. Gdy użytkownik naciągnie element menu na pasku akcji, obiekt ShareActionProvider ładuje aplikację do obsługi intencji skojarzonej z elementem ShareActionProvider. W tym przykładzie aplikacja do obsługi komunikatów została wcześniej użyta, więc jest wyświetlana na pasku akcji.

Zrzut ekranu przedstawiający ikonę aplikacji do obsługi komunikatów na pasku akcji

Gdy użytkownik kliknie element na pasku akcji, zostanie uruchomiona aplikacja do obsługi komunikatów zawierająca udostępniony obraz, jak pokazano poniżej:

Zrzut ekranu przedstawiający aplikację do obsługi komunikatów z obrazem małpy

Określanie klasy dostawcy akcji

Aby użyć ShareActionProviderpolecenia , ustaw android:actionProviderClass atrybut w elemencie menu w pliku XML dla menu paska akcji w następujący sposób:

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

Zawyżanie menu

Aby zawyżyć menu, zastąpimy OnCreateOptionsMenu ją w podklasie Activity. Gdy mamy odwołanie do menu, możemy pobrać ShareActionProvider element z ActionProvider właściwości elementu menu, a następnie użyć metody SetShareIntent, aby ustawić ShareActionProviderintencję "s", jak pokazano poniżej:

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

Tworzenie intencji

Użyje ShareActionProvider intencji przekazanej SetShareIntent do metody w powyższym kodzie, aby uruchomić odpowiednie działanie. W tym przypadku utworzymy intencję wysyłania obrazu przy użyciu następującego kodu:

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

Obraz w powyższym przykładzie kodu jest dołączany jako zasób do aplikacji i kopiowany do publicznie dostępnej lokalizacji po utworzeniu działania, więc będzie dostępny dla innych aplikacji, takich jak aplikacja do obsługi komunikatów. Przykładowy kod dołączony do tego artykułu zawiera pełne źródło tego przykładu, ilustrujące jego użycie.