ActionBar dla platformy Xamarin.Android
W przypadku korzystania z programu TabActivity
kod 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.
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 TextView
element , 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.
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:
Określanie klasy dostawcy akcji
Aby użyć ShareActionProvider
polecenia , 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ć ShareActionProvider
intencję "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.