Как настроить кнопку «Назад» на панели действий


188

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

Последнее, что я хочу настроить, это изображение кнопки «Назад». По умолчанию он серый, и мне бы хотелось, чтобы он был белым. Сработает либо изменение цвета, указание рисунка или просто его прозрачность (и добавление шеврона в мое настроенное изображение логотипа). Как мне это сделать?


1
На панели действий нет кнопки НАЗАД. Кнопка BACK находится на системной панели или не отображается на экране (для устройств с кнопкой BACK вне экрана).
CommonsWare

1
@CommonsWare, я не уверен, как называется «левый шеврон» на панели действий, но я называю его кнопкой «назад». Я думаю, что ожидается замена физической кнопки назад на устройствах Android в будущем.
Сунил Говда

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

2
«так что насчет новых устройств, у которых нет физической кнопки« назад », все ли они отображают« мягкую »кнопку возврата» - у всех них должна быть кнопка «НАЗАД» на системной панели.
CommonsWare

3
просто хочу , чтобы добавить в большинстве случаев кнопки UP БУДЕТ просто вернуться. См. «Если ранее просмотренный экран также являлся иерархическим родителем текущего экрана, нажатие клавиши« Назад »будет иметь тот же результат, что и нажатие кнопки« Вверх »- это обычное явление». 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?
Джеймс МакКракен

3
@JamesMcCracken единственный способ, которым я смог сделать это, был с помощью пользовательского макета.
greg7gkb

4
Кто-нибудь сделал эту работу с Navigation Drawer? Я предполагаю, что ActionBarDrawerToggleзаменяет индикатор «вверх» на свой собственный, поэтому установка его на стиль не имеет никакого эффекта ...
Лукас Джота

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 boxToggle.setDrawerIndicatorEnabled (false); это работает для меня :)
Контекст

30

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

Переопределите фактический стиль для устройств до v11.

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

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

Обратите внимание, что родитель может быть изменен на любую тему Шерлока.

Переопределите фактический стиль для устройств v11 +.

В той же папке, где находятся значения папок, создайте новую папку под названием values-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 использует панель действий по умолчанию, которая поставляется с 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
И вы можете попробовать @ drawable / abc_ic_ab_back_holo_light или @ drawable / 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, кнопка «Назад» будет белой, в противном случае, если вы используете светлую тему панели действий, она будет черной.


Ваш код работает для меня, но мы можем изменить цвет этого индикатора?
Стив Лак

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

Я использую "app: theme =" @ style / ThemeOverlay.AppCompat.Light "", чтобы отобразить навигационный значок белым фоном, но он отображает серый значок по умолчанию, мне нужно изменить его на синий. "colorControlNormal and android: textColorSecondary" не работает.
Стив Лак

2
Используйте пользовательскую тему, которая имеет «ThemeOverlay.AppCompat.Light» в качестве родителя. Это может сработать.
Огуз Озджан

1
Я нашел решение изменить значок навигации, используя name = "colorControlNormal", а не name = "android: colorControlNormal". Но я хочу поменять на другой рисунок, может быть?
Стив Лак


0

Я использовал изображение back.png в файле проекта menifest.xml. это прекрасно работает в проекте.

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

0

У меня была та же проблема направления значка кнопки «Домой» на панели действий, из-за отсутствия управления значком в каталоге ресурсов Gradle.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.