Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Přehled
Tato část vysvětluje, jak používat Toolbar ve verzích Androidu starších než Android 5.0 Lollipop. Pokud vaše aplikace nepodporuje verze Androidu starší než Android 5.0, můžete tuto část přeskočit.
Protože Toolbar je součástí knihovny podpory Pro Android v7, můžete ji použít na zařízeních s Androidem 2.1 (rozhraní API úrovně 7) a novějším. Nicméně, Android Support Library v7 AppCompat NuGet musí být nainstalován a kód změněn tak, aby používal implementaci Toolbar uvedenou v této knihovně. Tato část vysvětluje, jak nainstalovat tento NuGet a upravit aplikaci ToolbarFun z přidání druhého panelu nástrojů tak, aby běžela ve verzích Androidu starších než Lollipop 5.0.
Úprava aplikace tak, aby používala verzi panelu nástrojů AppCompat:
Nastavte minimální a cílovou verzi Androidu pro aplikaci.
Nainstalujte balíček NuGet AppCompat.
Místo integrovaného motivu androidu použijte motiv AppCompat.
Upravit
MainActivitytak, aby podtřídyAppCompatActivityspíše nežActivity.
Každý z těchto kroků je podrobně vysvětlený v následujících částech.
Nastavení minimální a cílové verze Androidu
Cílová architektura aplikace musí být nastavená na úroveň ROZHRANÍ API 21 nebo vyšší, jinak se aplikace nenasadí správně. Pokud se při nasazování aplikace zobrazí chyba typu Žádný identifikátor prostředku pro atribut tileModeX v balíčku Android , důvodem je to, že cílová architektura není nastavená na Android 5.0 (úroveň rozhraní API 21 – Lollipop) nebo vyšší.
Nastavte úroveň cílové architektury na úroveň rozhraní API úrovně 21 nebo vyšší a nastavte nastavení projektu na úrovni rozhraní Android API na minimální verzi Androidu, kterou má aplikace podporovat. Další informace o nastavení úrovní rozhraní ANDROID API najdete v tématu Principy úrovní rozhraní ANDROID API.
V tomto příkladu ToolbarFun je minimální verze Androidu nastavená na KitKat (úroveň rozhraní API 4.4).
Instalace balíčku NuGet AppCompat
Dále do projektu přidejte balíček AppCompat knihovny podpory pro Android v7. V sadě Visual Studio klikněte pravým tlačítkem na Odkazy a vyberte Spravovat balíčky NuGet.... Klikněte na Procházet a vyhledejte knihovnu podpory androidu v7 AppCompat. Vyberte Xamarin.Android.Support.v7.AppCompat a klikněte na Nainstalovat:
Pokud je tento balíček NuGet nainstalovaný, nainstaluje se také několik dalších balíčků NuGet ( například Xamarin.Android.Support.Animated.Vector.Drawable, Xamarin.Android.Support.v4 a Xamarin.Android.Support.Vector.Drawable). Další informace o instalaci balíčků NuGet naleznete v tématu Návod: Zahrnutí NuGetu do projektu.
Použití motivu a panelu nástrojů AppCompat
Knihovna AppCompat obsahuje několik Theme.AppCompat motivů, které lze použít v libovolné verzi Androidu podporované knihovnou AppCompat. Ukázkový ToolbarFun motiv aplikace je odvozen od Theme.Material.Light.DarkActionBar, který není k dispozici ve verzích Android starších než Lollipop. Proto musí být upravena tak, ToolbarFun aby pro tento motiv používala protějšek AppCompat, Theme.AppCompat.Light.DarkActionBar. Protože Toolbar také není k dispozici ve verzích Android starší než Lollipop, musíme použít appCompat verze Toolbar. Proto musí rozložení používat android.support.v7.widget.Toolbar místo Toolbar.
Aktualizovat rozložení
Upravte resources/layout/Main.axml a nahraďte Toolbar element následujícím kódem XML:
<android.support.v7.widget.Toolbar
android:id="@+id/edit_toolbar"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorAccent"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
Upravte prostředky, rozložení/ toolbar.xml a nahraďte jeho obsah následujícím kódem XML:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>
Všimněte si, že hodnoty už nemají předponu android: (vzpomeňte si, ?attr že ? zápis odkazuje na prostředek v aktuálním motivu). Pokud ?android:attr by se zde stále používal, Android by odkazoval na hodnotu atributu z aktuálně spuštěné platformy, a ne z knihovny AppCompat. Vzhledem k tomu, že tento příklad používá definovanou actionBarSize knihovnou AppCompat, předpona android: se zahodí. Podobně se změní na to, @android:style aby android:theme atribut byl nastaven na motiv v knihovně AppCompat – ThemeOverlay.AppCompat.Dark.ActionBar motiv se zde používá místo ThemeOverlay.Material.Dark.ActionBar.@style
Aktualizace stylu
Upravte prostředky, hodnoty nebo styles.xml a nahraďte jeho obsah následujícím kódem XML:
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<style name="MyTheme" parent="MyTheme.Base"> </style>
<style name="MyTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="colorPrimary">#5A8622</item>
<item name="colorAccent">#A88F2D</item>
</style>
</resources>
Názvy položek a nadřazený motiv v tomto příkladu už nemají předponu android: , protože používáme knihovnu AppCompat.
Také se nadřazený motiv změní na verzi AppCompat verze Light.DarkActionBar.
Aktualizovat nabídky
Pro podporu starších verzí Androidu používá knihovna AppCompat vlastní atributy, které zrcadlí atributy android: oboru názvů. Některé atributy (například showAsAction atribut použitý ve <menu> značce) však v rozhraní Android na starších zařízeních neexistují – showAsAction byl zaveden v rozhraní Android API 11, ale není k dispozici v rozhraní Android API 7. Z tohoto důvodu musí být vlastní obor názvů použit k předponě všech atributů definovaných knihovnou podpory. V souborech prostředků nabídky je definován obor názvů local pro předponu atributu showAsAction .
Upravte prostředky/ menu/top_menus.xml a nahraďte jeho obsah následujícím kódem XML:
<?xml version="1.0" encoding="utf-8" ?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_edit"
android:icon="@mipmap/ic_action_content_create"
local:showAsAction="ifRoom"
android:title="Edit" />
<item
android:id="@+id/menu_save"
android:icon="@mipmap/ic_action_content_save"
local:showAsAction="ifRoom"
android:title="Save" />
<item
android:id="@+id/menu_preferences"
local:showAsAction="never"
android:title="Preferences" />
</menu>
Obor local názvů se přidá pomocí tohoto řádku:
xmlns:local="http://schemas.android.com/apk/res-auto">
Atribut showAsAction je před tímto oborem názvů, nikoli s tímto local: oborem názvů. android:
local:showAsAction="ifRoom"
Podobně upravte prostředky,menu/edit_menus.xml a nahraďte jeho obsah následujícím kódem XML:
<?xml version="1.0" encoding="utf-8" ?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_cut"
android:icon="@mipmap/ic_menu_cut_holo_dark"
local:showAsAction="ifRoom"
android:title="Cut" />
<item
android:id="@+id/menu_copy"
android:icon="@mipmap/ic_menu_copy_holo_dark"
local:showAsAction="ifRoom"
android:title="Copy" />
<item
android:id="@+id/menu_paste"
android:icon="@mipmap/ic_menu_paste_holo_dark"
local:showAsAction="ifRoom"
android:title="Paste" />
</menu>
Jak tento přepínač oboru názvů poskytuje podporu atributu showAsAction ve verzích Androidu před úrovní rozhraní API 11? Vlastní atribut showAsAction a všechny jeho možné hodnoty jsou zahrnuty v aplikaci při instalaci NuGet AppCompat.
Podtřída AppCompatActivity
Posledním krokem v převodu je úprava MainActivity tak, aby se jedná o podtřídu AppCompatActivity. Upravte MainActivity.cs a přidejte následující using příkazy:
using Android.Support.V7.App;
using Toolbar = Android.Support.V7.Widget.Toolbar;
To deklarujeToolbar, že se jedná o verzi appCompat .Toolbar Dále změňte definici MainActivitytřídy :
public class MainActivity : AppCompatActivity
Chcete-li nastavit panel akcí na verzi ToolbarAppCompat , nahraďte volání SetActionBar .SetSupportActionBar V tomto příkladu se název také změní, aby značil, že se používá verze Toolbar AppCompat:
SetSupportActionBar (toolbar);
SupportActionBar.Title = "My AppCompat Toolbar";
Nakonec změňte minimální úroveň Androidu na hodnotu před lollipop, která se má podporovat (například rozhraní API 19).
Sestavte aplikaci a spusťte ji na zařízení s před lollipopem nebo emulátoru Androidu. Následující snímek obrazovky ukazuje verzi AppCompat ToolbarFun na Nexusu 4 se spuštěným KitKat (API 19):
Když se používá knihovna AppCompat, motivy se nemusí přepínat na základě verze Androidu – knihovna AppCompat umožňuje poskytovat konzistentní uživatelské prostředí ve všech podporovaných verzích Androidu.

