ActionBar für Xamarin.Android
Bei Verwendung TabActivity
hat der Code zum Erstellen der Registerkartensymbole keine Auswirkungen auf die Ausführung mit dem Android 4.0-Framework. Obwohl es funktionell wie in Android-Versionen vor 2.3 funktioniert, ist die TabActivity
Klasse selbst in Version 4.0 veraltet. Es wurde eine neue Möglichkeit zum Erstellen einer Registerkartenbenutzeroberfläche eingeführt, die die Aktionsleiste verwendet, die als Nächstes erläutert wird.
Aktionsleistenregisterkarten
Die Aktionsleiste unterstützt das Hinzufügen von Schnittstellen mit Registerkarten in Android 4.0. Der folgende Screenshot zeigt ein Beispiel für eine solche Schnittstelle.
Um Registerkarten in der Aktionsleiste zu erstellen, müssen sie zunächst die -Eigenschaft so festlegen NavigationMode
, dass Registerkarten unterstützt werden. In Android 4 ist eine ActionBar
Eigenschaft für die Activity-Klasse verfügbar, die wir verwenden können, um folgendes NavigationMode
festzulegen:
this.ActionBar.NavigationMode = ActionBarNavigationMode.Tabs;
Anschließend können Sie eine Registerkarte erstellen, indem Sie die NewTab
-Methode auf der Aktionsleiste aufrufen. Mit dieser Registerkarte instance können wir die SetText
Methoden und SetIcon
aufrufen, um den Beschriftungstext und das Symbol der Registerkarte festzulegen. Diese Aufrufe werden in der reihenfolge im folgenden Code ausgeführt:
var tab = this.ActionBar.NewTab ();
tab.SetText (tabText);
tab.SetIcon (Resource.Drawable.ic_tab_white);
Bevor wir jedoch die Registerkarte hinzufügen können, müssen wir das TabSelected
Ereignis behandeln. In diesem Handler können wir den Inhalt für die Registerkarte erstellen. Aktionsleistenregisterkarten sind für die Verwendung mit Fragmenten konzipiert, bei denen es sich um Klassen handelt, die einen Teil der Benutzeroberfläche in einer Aktivität darstellen. In diesem Beispiel enthält die Fragmentansicht eine einzelne TextView
, die wir in unserer Fragment
Unterklasse wie folgt aufblähen:
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;
}
}
Das im TabSelected
Ereignis übergebene Ereignisargument ist vom Typ TabEventArgs
, das eine FragmentTransaction
Eigenschaft enthält, die wir verwenden können, um das Fragment wie unten dargestellt hinzuzufügen:
tab.TabSelected += delegate(object sender, ActionBar.TabEventArgs e) {
e.FragmentTransaction.Add (Resource.Id.fragmentContainer,
new SampleTabFragment ());
};
Schließlich können wir die Registerkarte der Aktionsleiste hinzufügen, indem wir die AddTab
-Methode aufrufen, wie in diesem Code gezeigt:
this.ActionBar.AddTab (tab);
Das vollständige Beispiel finden Sie im HelloTabsICS-Projekt im Beispielcode für dieses Dokument.
ShareActionProvider
Die ShareActionProvider
-Klasse ermöglicht eine Freigabeaktion über eine Aktionsleiste. Es erstellt eine Aktionsansicht mit einer Liste von Apps, die eine Freigabeabsicht verarbeiten können, und speichert einen Verlauf der zuvor verwendeten Anwendungen, um später über die Aktionsleiste darauf zuzugreifen. Auf diese Weise können Anwendungen Daten über eine Benutzeroberfläche freigeben, die in Android konsistent ist.
Beispiel für die Bildfreigabe
Unten sehen Sie beispielsweise einen Screenshot einer Aktionsleiste mit einem Menüelement zum Freigeben eines Bilds (aus dem ShareActionProvider-Beispiel ). Wenn der Benutzer auf der Aktionsleiste auf das Menüelement tippt, lädt der ShareActionProvider die Anwendung, um eine Absicht zu behandeln, die dem ShareActionProvider
zugeordnet ist. In diesem Beispiel wurde die Messaginganwendung zuvor verwendet, sodass sie auf der Aktionsleiste angezeigt wird.
Wenn der Benutzer auf das Element in der Aktionsleiste klickt, wird die Messaging-App gestartet, die das freigegebene Bild enthält, wie unten gezeigt:
Angeben der Aktionsanbieterklasse
Um die ShareActionProvider
zu verwenden, legen Sie das android:actionProviderClass
Attribut für ein Menüelement im XML-Code für das Menü der Aktionsleiste wie folgt fest:
<?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>
Auffüllen des Menüs
Um das Menü aufzufüllen, überschreiben OnCreateOptionsMenu
wir in der Unterklasse Aktivität. Sobald wir einen Verweis auf das Menü haben, können wir die ShareActionProvider
aus der ActionProvider
Eigenschaft des Menüelements abrufen und dann die SetShareIntent-Methode verwenden, um die ShareActionProvider
Absicht festzulegen, wie unten gezeigt:
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 ());
}
Erstellen der Absicht
Verwendet ShareActionProvider
die Absicht, die an die SetShareIntent
Methode im obigen Code übergeben wird, um die entsprechende Aktivität zu starten. In diesem Fall erstellen wir eine Absicht zum Senden eines Images mit dem folgenden Code:
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;
}
Das Bild im obigen Codebeispiel wird als Medienobjekt mit der Anwendung eingeschlossen und an einen öffentlich zugänglichen Speicherort kopiert, wenn die Aktivität erstellt wird, sodass es für andere Anwendungen zugänglich ist, z. B. die Messaging-App. Der diesem Artikel beigefügte Beispielcode enthält die vollständige Quelle dieses Beispiels und veranschaulicht dessen Verwendung.