ActionBar für Xamarin.Android
Bei Verwendung TabActivity
hat der Code zum Erstellen der Registerkartensymbole keine Auswirkung, wenn er mit dem Android 4.0-Framework ausgeführt wird. Obwohl es funktionell funktioniert wie in Versionen von Android vor 2.3, wurde die TabActivity
Klasse selbst in 4.0 veraltet. Es wurde eine neue Möglichkeit zum Erstellen einer Registerkartenschnittstelle eingeführt, die die Aktionsleiste verwendet, die als nächstes erläutert wird.
Registerkarten der Aktionsleiste
Die Aktionsleiste enthält Unterstützung für das Hinzufügen von Registerkartenschnittstellen in Android 4.0. Der folgende Screenshot zeigt ein Beispiel für eine solche Schnittstelle.
Um Registerkarten in der Aktionsleiste zu erstellen, müssen wir zuerst die NavigationMode
Zugehörige Eigenschaft so festlegen, dass Registerkarten unterstützt werden. In Android 4 ist eine ActionBar
Eigenschaft in der Activity-Klasse verfügbar, die wir verwenden können, um folgendes NavigationMode
festzulegen:
this.ActionBar.NavigationMode = ActionBarNavigationMode.Tabs;
Sobald dies erfolgt ist, können wir eine Registerkarte erstellen, indem wir die NewTab
Methode auf der Aktionsleiste aufrufen. Mit dieser Registerkarteninstanz können wir die SetText
Und SetIcon
Methoden aufrufen, um den Beschriftungstext und das Symbol der Registerkarte festzulegen. Diese Aufrufe werden in der folgenden Reihenfolge im folgenden Code ausgeführt:
var tab = this.ActionBar.NewTab ();
tab.SetText (tabText);
tab.SetIcon (Resource.Drawable.ic_tab_white);
Bevor wir die Registerkarte jedoch hinzufügen können, müssen wir das TabSelected
Ereignis behandeln. In diesem Handler können wir den Inhalt für die Registerkarte erstellen. Aktionsleistenregister sind so konzipiert, dass sie mit Fragmenten arbeiten, 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 aufblasen:
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 ereignisargument, das TabSelected
im Ereignis übergeben wird, ist vom Typ TabEventArgs
, der 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 der Aktionsleiste die Registerkarte hinzufügen, indem wir die AddTab
Methode aufrufen, wie in diesem Code gezeigt:
this.ActionBar.AddTab (tab);
Das vollständige Beispiel finden Sie im Beispielcode für dieses Dokument im HelloTabsICS-Projekt .
ShareActionProvider
Die ShareActionProvider
Klasse ermöglicht eine Freigabeaktion, die über eine Aktionsleiste ausgeführt werden kann. Es kümmert sich um das Erstellen einer Aktionsansicht mit einer Liste von Apps, die eine Freigabeabsicht behandeln können, und behält einen Verlauf der zuvor verwendeten Anwendungen für den einfachen Zugriff auf sie später über die Aktionsleiste. 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 z. B. einen Screenshot einer Aktionsleiste mit einem Menüelement, um ein Bild zu teilen. Wenn der Benutzer auf das Menüelement auf der Aktionsleiste tippt, lädt der ShareActionProvider die Anwendung, um eine Absicht zu behandeln, die der ShareActionProvider
Aktionsleiste zugeordnet ist. In diesem Beispiel wurde die Messaginganwendung bereits verwendet, sodass sie auf der Aktionsleiste angezeigt wird.
Wenn der Benutzer auf das Element in der Aktionsleiste klickt, wird die Messaging-App, die das freigegebene Bild enthält, gestartet, wie unten dargestellt:
Angeben der Aktionsanbieterklasse
Um das ShareActionProvider
android:actionProviderClass
Attribut für ein Menüelement im XML-Code für das Menü der Aktionsleiste wie folgt zu verwenden:
<?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>
Aufblasen des Menüs
Um das Menü zu überblasen, überschreiben OnCreateOptionsMenu
wir die Aktivitätsunterklasse. Sobald wir einen Verweis auf das Menü haben, können wir die ShareActionProvider
Von 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
Die ShareActionProvider
Absicht wird verwendet, die an die SetShareIntent
Methode im obigen Code übergeben wird, um die entsprechende Aktivität zu starten. In diesem Fall erstellen wir eine Absicht, ein Bild mithilfe des folgenden Codes zu senden:
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 ist als Ressource für die Anwendung enthalten und an einen öffentlich zugänglichen Speicherort kopiert, wenn die Aktivität erstellt wird, sodass sie für andere Anwendungen, z. B. die Messaging-App, zugänglich ist. Der Beispielcode, der zu diesem Artikel gehört, enthält die vollständige Quelle dieses Beispiels, die die Verwendung veranschaulicht.