Sdílet prostřednictvím


Nahrazení panelu akcí

Přehled

Jedním z nejběžnějších použití je Toolbar nahrazení výchozího panelu akcí vlastním Toolbar panelem akcí (když se vytvoří nový projekt Androidu, použije se výchozí panel akcí). Toolbar Vzhledem k tomu, že poskytuje možnost přidávat značková loga, názvy, položky nabídek, navigační tlačítka a dokonce i vlastní zobrazení do oddílu panelu aplikací uživatelského rozhraní aktivity, nabízí významný upgrade na výchozím panelu akcí.

Nahrazení výchozího panelu Toolbarakcí aplikace pomocí:

  1. Vytvořte nový vlastní motiv a upravte vlastnosti aplikace tak, aby používal tento nový motiv.

  2. windowActionBar Zakažte atribut ve vlastním motivu a povolte windowNoTitle atribut.

  3. Definujte rozložení pro .Toolbar

  4. Zahrňte Toolbar rozložení do souboru rozložení Main.axml aktivity.

  5. Přidejte do metody aktivity OnCreate kód, který vyhledá Toolbar a zavolá SetActionBar , aby se nainstaloval jako ToolBar panel akcí.

Tento proces podrobně vysvětluje následující části. Vytvoří se jednoduchá aplikace a její panel akcí se nahradí přizpůsobeným Toolbar.

Spuštění projektu aplikace

Vytvořte nový projekt Androidu s názvem ToolbarFun (další informace o vytvoření nového projektu androidu najdete v tématu Hello, Android ). Po vytvoření tohoto projektu nastavte cílovou a minimální úroveň rozhraní Android API na Android 5.0 (api level 21 – Lollipop) nebo novější. Další informace o nastavení úrovní verzí Androidu najdete v tématu Principy úrovní rozhraní ANDROID API. Když je aplikace sestavená a spuštěná, zobrazí se výchozí panel akcí, jak je vidět na tomto snímku obrazovky:

Snímek obrazovky s výchozím panelem akcí

Vytvoření vlastního motivu

Otevřete adresář Resources/values a vytvořte nový soubor s názvem styles.xml. Nahraďte jeho obsah následujícím kódem XML:

<?xml version="1.0" encoding="utf-8" ?>
<resources>
  <style name="MyTheme" parent="@android:style/Theme.Material.Light.DarkActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:colorPrimary">#5A8622</item>
  </style>
</resources>

Tento KÓD XML definuje nový vlastní motiv s názvem MyTheme , který je založen na motivu Theme.Material.Light.DarkActionBar v Lollipop. Atribut windowNoTitle je nastavený na true skrytí záhlaví:

<item name="android:windowNoTitle">true</item>

Pokud chcete zobrazit vlastní panel nástrojů, musí být výchozí ActionBar nastavení zakázané:

<item name="android:windowActionBar">false</item>

Pro barvu pozadí panelu nástrojů se používá nastavení olivově zelené colorPrimary :

<item name="android:colorPrimary">#5A8622</item>

Použití vlastního motivu

Upravte vlastnosti/AndroidManifest.xml a přidejte do elementu <application> následující android:theme atribut, aby aplikace používala MyTheme vlastní motiv:

<application android:label="@string/app_name" android:theme="@style/MyTheme"></application>

Další informace o použití vlastního motivu v aplikaci najdete v tématu Použití vlastních motivů.

Definování rozložení panelu nástrojů

V adresáři Resources/layout vytvořte nový soubor s názvem toolbar.xml. Nahraďte jeho obsah následujícím kódem XML:

<?xml version="1.0" encoding="utf-8"?>
<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="?android:attr/actionBarSize"
    android:background="?android:attr/colorPrimary"
    android:theme="@android:style/ThemeOverlay.Material.Dark.ActionBar"/>

Tento KÓD XML definuje vlastní Toolbar , který nahrazuje výchozí panel akcí. Minimální výška Toolbar je nastavená na velikost panelu akcí, který nahrazuje:

android:minHeight="?android:attr/actionBarSize"

Barva Toolbar pozadí je nastavena na olivově zelenou barvu definovanou dříve v styles.xml:

android:background="?android:attr/colorPrimary"

Počínaje lollipopem android:theme lze atribut použít ke stylu individuálního zobrazení. Motivy ThemeOverlay.Material představené v Lollipop umožňují překrýt výchozí Theme.Material motivy a přepsat relevantní atributy, aby byly buď světlé, nebo tmavé. V tomto příkladu Toolbar používá tmavý motiv, aby jeho obsah byl světlý v barvě:

android:theme="@android:style/ThemeOverlay.Material.Dark.ActionBar"

Toto nastavení se používá tak, aby položky nabídky kontrastovat s tmavší barvou pozadí.

Zahrnout rozložení panelu nástrojů

Upravte soubor rozložení Resources/layout/Main.axml a nahraďte jeho obsah následujícím kódem XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <include
        android:id="@+id/toolbar"
        layout="@layout/toolbar" />
</RelativeLayout>

Toto rozložení zahrnuje Toolbar definované v toolbar.xml a používá RelativeLayout k určení, že Toolbar se má umístit do horní části uživatelského rozhraní (nad tlačítkem).

Vyhledání a aktivace panelu nástrojů

Upravte MainActivity.cs a přidejte následující příkaz using:

using Android.Views;

Na konec OnCreate metody přidejte také následující řádky kódu:

var toolbar = FindViewById<Toolbar>(Resource.Id.toolbar);
SetActionBar(toolbar);
ActionBar.Title = "My Toolbar";

Tento kód najde Toolbar a zavolá SetActionBar tak, aby se chytly výchozí charakteristiky panelu Toolbar akcí. Název panelu nástrojů se změní na Můj panel nástrojů. Jak je vidět v tomto příkladu ToolBar kódu, můžete na panel akcí přímo odkazovat. Zkompilujte a spusťte tuto aplikaci – vlastní Toolbar nastavení se zobrazí místo výchozího panelu akcí:

Snímek obrazovky s přizpůsobeným panelem nástrojů se zeleným barevným schématem

Všimněte si, že Toolbar styl se styluje nezávisle na motivu Theme.Material.Light.DarkActionBar použitém ve zbytku aplikace.

Pokud při spuštění aplikace dojde k výjimce, přečtěte si část Řešení potíží níže.

Přidat položky nabídky

V této části jsou nabídky přidány do .Toolbar Pravá horní oblast ToolBar je vyhrazena pro položky nabídky – každá položka nabídky (označovaná také jako položka akce) může provést akci v rámci aktuální aktivity nebo může provést akci jménem celé aplikace.

Přidání nabídek do :Toolbar

  1. Do složek projektu aplikace přidejte ikony nabídek (pokud je to potřeba mipmap- ). Google poskytuje sadu ikon bezplatných nabídek na stránce Ikony materiálu.

  2. Definujte obsah položek nabídky přidáním nového souboru prostředku nabídky v části Prostředky/nabídka.

  3. OnCreateOptionsMenu Implementujte metodu aktivity – tato metoda nafoukne položky nabídky.

  4. OnOptionsItemSelected Implementujte metodu aktivity – tato metoda provede akci při klepnutí na položku nabídky.

Následující části ukazují tento proces podrobně přidáním položek nabídky Upravit a Uložit do přizpůsobeného Toolbarsouboru .

Instalovat ikony nabídek

Pokračujte ukázkovou ToolbarFun aplikací a přidejte do projektu aplikace ikony nabídek. Stáhněte si ikony panelu nástrojů, rozbalte a zkopírujte obsah extrahovaných mipmap- složek do projektů mipmap- složek v části ToolbarFun/Resources a vložte do projektu každý přidaný soubor ikon.

Definování prostředku nabídky

V části Prostředky vytvořte podadresář nové nabídky. V podadresáři nabídky vytvořte nový soubor prostředku nabídky s názvem 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">
  <item
       android:id="@+id/menu_edit"
       android:icon="@mipmap/ic_action_content_create"
       android:showAsAction="ifRoom"
       android:title="Edit" />
  <item
       android:id="@+id/menu_save"
       android:icon="@mipmap/ic_action_content_save"
       android:showAsAction="ifRoom"
       android:title="Save" />
  <item
       android:id="@+id/menu_preferences"
       android:showAsAction="never"
       android:title="Preferences" />
</menu>

Tento KÓD XML vytvoří tři položky nabídky:

  • Položka nabídky Upravit, která používá ic_action_content_create.png ikonu (tužku).

  • Položka nabídky Uložit, která používá ic_action_content_save.png ikonu (disketu).

  • Položka nabídky Předvolby, která nemá ikonu.

Atributy showAsAction položek nabídky Upravit a Uložit jsou nastaveny na ifRoom – toto nastavení způsobí, že se tyto položky nabídky zobrazí v Toolbar případě, že je k dispozici dostatek místa pro zobrazení. Položka nabídky Předvolby se nastaví showAsAction na never – to způsobí , že se nabídka Předvolby zobrazí v nabídce přetečení (tři svislé tečky).

Implementace OnCreateOptionsMenu

Do MainActivity.cs přidejte následující metodu:

public override bool OnCreateOptionsMenu(IMenu menu)
{
    MenuInflater.Inflate(Resource.Menu.top_menus, menu);
    return base.OnCreateOptionsMenu(menu);
}

Android volá metodu OnCreateOptionsMenu , aby aplikace mohl zadat prostředek nabídky pro aktivitu. V této metodě se top_menus.xml prostředek nafoukne do předaného menu. Tento kód způsobí, že se nové položky nabídky Upravit, Uložit a Předvolby zobrazí v nabídce Toolbar.

Implementace OnOptionsItemSelected

Do MainActivity.cs přidejte následující metodu:

public override bool OnOptionsItemSelected(IMenuItem item)
{
    Toast.MakeText(this, "Action selected: " + item.TitleFormatted,
        ToastLength.Short).Show();
    return base.OnOptionsItemSelected(item);
}

Když uživatel klepne na položku nabídky, Android zavolá metodu OnOptionsItemSelected a předá ji do vybrané položky nabídky. V tomto příkladu implementace zobrazí informační zpráva, která označuje, na kterou položku nabídky jste klepli.

Sestavte a spusťte ToolbarFun , abyste viděli nové položky nabídky na panelu nástrojů. Teď Toolbar se zobrazí tři ikony nabídek, jak je vidět na tomto snímku obrazovky:

Diagram znázorňující umístění položek nabídky Upravit, Uložit a Přetečení

Když uživatel klepne na položku nabídky Upravit , zobrazí se informační zpráva označující, že OnOptionsItemSelected metoda byla volána:

Snímek obrazovky s informační zprávami zobrazenými při klepnutí na položku Upravit

Když uživatel klepne na nabídku přetečení, zobrazí se položka nabídky Předvolby . Méně časté akce by se obvykle měly umístit do nabídky přetečení – tento příklad používá nabídku přetečení pro Předvolby , protože se nepoužívá tak často jako Edit and Save:

Snímek obrazovky s položkou nabídky Předvolby, která se zobrazí v nabídce Přetečení

Další informace o nabídkách Androidu najdete v tématu Vývojářské nabídky androidu .

Řešení problému

Následující tipy vám můžou pomoct při ladění problémů, ke kterým může dojít při nahrazení panelu akcí panelem nástrojů.

Aktivita už má panel akcí

Pokud aplikace není správně nakonfigurovaná tak, aby používala vlastní motiv, jak je vysvětleno v části Použití vlastního motivu, může při spuštění aplikace dojít k následující výjimce:

Chyba, ke které může dojít, když se vlastní motiv nepoužívá

Kromě toho může být vytvořena chybová zpráva: Java.Lang.IllegalStateException: Tato aktivita již obsahuje panel akcí zadaný dekorem okna.

Chcete-li tuto chybu opravit, ověřte, zda android:theme je atribut vlastního motivu přidán ( <application> v části Properties/AndroidManifest.xml), jak je popsáno výše v části Použití vlastního motivu. Kromě toho může být tato chyba způsobena, pokud Toolbar není správně nakonfigurované rozložení nebo vlastní motiv.