Як налаштувати кнопку назад на ActionBar


188

Мені вдалося налаштувати фон, логотип зображення та колір тексту на панелі дій, використовуючи наступні пропозиції:
Android: Як змінити піктограму «Домашній» ActionBar на щось інше, ніж піктограма програми?
Колір тексту
ActionBar Фонове зображення ActionBar

Останній фрагмент, який я хочу налаштувати, - це зображення кнопки "назад". За замовчуванням він сірий, і я хотів би, щоб він був білим. Зміна кольору, вказавши малюнок або просто зробивши його прозорим (і додавши шеврон до мого налаштованого зображення логотипу), спрацює. Як мені це зробити?


1
На панелі дій відсутня кнопка НАЗАД. Кнопка НАЗАД знаходиться на системній панелі або відсутня на екрані (для пристроїв із позаекранною кнопкою НАЗАД).
CommonsWare

1
@CommonsWare, я не впевнений, як називається "лівий шеврон" на панелі дій, - але це саме я називаю кнопку "назад". Я думаю, що очікується, що замінить фізичну кнопку назад на Android-пристроях, що рухаються вперед.
Sunil Gowda

13
Ні і ні. Це показник "вгору" (незважаючи на орієнтацію стрілки). Ви включите його з допомогою setDisplayHomeAsUpEnabled()на ActionBar. Спеціально НЕ передбачається просто повернутися "назад". Це означає, що натискання на піктограму програми перейде "вгору" за ієрархією, а не назад до попередньої діяльності (як і кнопка НАЗАД на системній панелі).
CommonsWare

2
"тож як щодо нових пристроїв, у яких немає фізичної кнопки повернення, чи всі вони відображають" м'яку "кнопку" назад "- всі вони повинні мати кнопку НАЗАД на системній панелі.
CommonsWare

3
просто хочеться додати у багатьох випадках Кнопка ВГОЛЬНО просто повернеться назад. Див. "Коли попередньо переглянутий екран є також ієрархічним батьківським поточним екраном, натискання клавіші" Назад "матиме такий самий результат, як і натискання кнопки" Вгору "- це звичайне явище." Від developer.android.com/design/patterns /navigation.html
Дорі

Відповіді:


390

Показник доступності "вгору" забезпечується графіком, вказаним в homeAsUpIndicatorатрибуті теми. Щоб замінити його власною власною власною версією, було б щось подібне:

<style name="Theme.MyFancyTheme" parent="android:Theme.Holo">
    <item name="android:homeAsUpIndicator">@drawable/my_fancy_up_indicator</item>
</style>

Якщо ви підтримуєте програму pre-3.0 зі своїм додатком, не забудьте вставити цю версію користувацької теми values-v11чи подібну.


10
працює і для мене. Я декларував усередині стилю, що є моїм ActionBarStyle, як в AOSP на github, але це не працює - перехід на головну тему зробив трюк! +1
Дорі

37
<item name="android:homeAsUpIndicator">@drawable/my_fancy_up_indicator</item>не працював для мене, але <item name="homeAsUpIndicator">@drawable/my_fancy_up_indicator</item>робив. Вгадайте, що це версія Android версії
Michał K

6
Чи є спосіб встановити для цього верхній і нижній прокладки для 0dp?
James McCracken

3
@JamesMcCracken єдиний спосіб, коли мені вдалося це зробити, було за допомогою власної верстки.
greg7gkb

4
Хтось робив цю роботу Navigation Drawer? Я думаю, що ActionBarDrawerToggleзамінює індикатор вгору одним із власних, тому встановлення його на стиль не впливає ...
Lucas Jota

89

Таким чином, ви можете легко змінити це програмно, використовуючи функцію homeAsUpIndicator (), додану в Android API рівня 18 і вище.

ActionBar().setHomeAsUpIndicator(R.drawable.ic_yourindicator);

Якщо ви використовуєте бібліотеку підтримки

getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_yourindicator);


5
Якщо ви використовуєте шухляду, вам потрібно зателефонувати, drawerToggle.setDrawerIndicatorEnabled(false);перш ніж змінити індикатор
Floss

2
@Floss Дякую, setDrawerIndicatorEnabled (false / true); вирішив мою проблему встановити домашню кнопку як відповідну 'Назад' та (Відкрити ящик / Закрити шухляду) на основі моїх вимог.
Ашраф Альшахаві

1
@Floss drawerToggle.setDrawerIndicatorEnabled (помилково); це працює для мене :)
Контекст

30

Я перевірив питання. Ось такі кроки, які я виконую. Вихідний код розміщений на GitHub: https://github.com/jiahaoliuliu/sherlockActionBarLab

Замініть фактичний стиль для пристроїв pre-v11.

Скопіюйте та вставте наступний код у файл styles.xml папки значень за замовчуванням.

<resources>
    <style name="MyCustomTheme" parent="Theme.Sherlock.Light">
    <item name="homeAsUpIndicator">@drawable/ic_home_up</item>
    </style>
</resources>

Зауважте, що батьківська програма може бути змінена на будь-яку тему Шерлока.

Замініть фактичний стиль для пристроїв v11 +.

У тій самій папці, де знаходяться значення папки, створіть нову папку під назвою значення-v11. Android автоматично шукатиме вміст цієї папки для пристроїв з API або вище.

Створіть новий файл під назвою styles.xml та вставте наступний код у файл:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyCustomTheme" parent="Theme.Sherlock.Light">
    <item name="android:homeAsUpIndicator">@drawable/ic_home_up</item>
    </style>
</resources>

Зауважте, що ім'я стилю повинно бути таким же, як файл у папці значень за замовчуванням, а замість елемента homeAsUpIndicator воно називається android: homeAsUpIndicator.

Проблема полягає в тому, що для пристроїв з API 11 або вище, Sherlock Action Bar використовується за замовчуванням Рядок дій, що постачається разом із Android, а ключове ім’я - android: homeAsUpIndicator. Але для пристроїв з API 10 або новішої версії, Sherlock Action Bar використовує власний ActionBar, який як домашній індикатор називається простим "homeAsUpIndicator".

Використовуйте нову тему в маніфесті

Замініть тему програми / активності у файлі AndroidManifest:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/MyCustomTheme" >

2
І ви можете спробувати @ dravable / abc_ic_ab_back_holo_light або @ dravable / abc_ic_ab_back_holo_dark, якщо шукаєте вже доступні значки холо.
Мейсон Лі

25

Зміна піктограми навігації назад відрізняється для ActionBar та панелі інструментів.

Для homeAsUpIndicatorатрибуту переопределення ActionBar :

<style name="CustomThemeActionBar" parent="android:Theme.Holo">
    <item name="homeAsUpIndicator">@drawable/ic_nav_back</item>
</style>

navigationIconАтрибут переопределення панелі інструментів :

<style name="CustomThemeToolbar" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="navigationIcon">@drawable/ic_nav_back</item>
</style>


5

Якщо ви використовуєте Панель інструментів, вам не потрібні ці рішення. Вам потрібно лише змінити тему панелі інструментів

app:theme="@style/ThemeOverlay.AppCompat.Light"

app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"

Якщо ви використовуєте dark.actionBar, ваша кнопка "назад" стане білою, якщо ви використовуєте тему "light action", вона стане чорною.


Ваш код працює для мене, але чи можемо ми змінити колір цього показника?
Стів Удача

2
colorControlNormal та android: textColorSecondary значення відповідають за це, але я не дуже впевнений, що ще ці значення також змінюються. Ви можете спробувати себе, визначивши ці значення на темі панелей інструментів.
Огуз Оскан

Я використовую "app: topic =" @ style / ThemeOverlay.AppCompat.Light "" для відображення навігаційного іконку у білому тлі, але він відображає сірий значок за замовчуванням, мені потрібно змінити його на синій. "colorControlNormal та android: textColorSecondary" не працює.
Стів Удача

2
Використовуйте власну тему, яка має "ThemeOverlay.AppCompat.Light" в якості батьків. Це може спрацювати.
Огуз Оскан

1
Я знайшов рішення змінити іконку nav, використовуючи name = "colorControlNormal" not name = "android: colorControlNormal". Але я хочу перейти на інший доступний, можливо?
Стів Удача


0

Я використав зображення back.png у файлі проекту menifest.xml. це добре працює в проекті.

<activity
        android:name=".YourActivity"
         android:icon="@drawable/back"
        android:label="@string/app_name" >
    </activity>

0

У мене був той самий випуск напряму піктограми кнопки Домашня панель дій через пропущене управління Icon у піктограмі каталогу ресурсів Gradle

як в арабському каталозі ресурсів Gradle, ви кладете піктограму в x-hdpi, а в англійській мові ресурс Gradle - те саме ім'я значка, яке ви поміщаєте в папку різної щільності, як xx-hdpi, так що в APK будуть два однакових імені значків у різних каталогах, тому ваш пристрій вибере залежну від щільності піктограму, може бути RTL або LTR

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.