Як змінити колір кнопки повернення панелі інструментів в Android?


100

Не вдалося змінити колір кнопки "Назад". Я використовую дизайн матеріалу панелі інструментів. У своєму додатку я застосовую чорний фон панелі інструментів, але дизайн тилу за замовчуванням чорний, тому я просто хочу змінити колір цієї кнопки назад. Будь ласка, дайте мені рішення.

Дякую


3
<style name = "MyMaterialTheme.Base" parent = "Theme.AppCompat.Light.DarkActionBar">
MMF

Відповіді:


80

використовувати цей стиль

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

я використовую цей стиль. що я повинен змінити в цьому стилі?
Назіма Каузер MMF

Ви можете використовувати власні файли зображень для кнопки "Назад". просто зателефонуйте в `@ drawable / your_image ''
Akhil Jayakumar

Це найкращий спосіб зробити це. Оскільки використання R.drawable.abc_ic_ab_back_mtrl_am_alpha для зміни кольору має ризики, оскільки версія підтримки часто змінює ресурс, який можна малювати.
Мостафа Імран

196

Ви можете додати стиль до вашого styles.xml,

<style name="ToolbarTheme" parent="@style/ThemeOverlay.AppCompat.ActionBar">
  <!-- Customize color of navigation drawer icon and back arrow --> 
  <item name="colorControlNormal">@color/toolbar_color_control_normal</item>
</style>

і додайте це як тему на свою панель інструментів у панелі інструментів layout.xml за допомогою app: theme , перевірте нижче

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    app:theme="@style/ToolbarTheme" >
</android.support.v7.widget.Toolbar>

4
Працювало як шарм, і звучить найбільш доречно.
Віджай Кумар Канта,

1
Проклятий. Це працює. Тепер мені просто потрібно щось еквівалентне для iOS. Дякую!
Ернесто

Краще було б назвати це
Темою панелей інструментів,

1
Для мене <style name = "ToolbarTheme" parent = "@ style / Theme.AppCompat.NoActionBar"> спрацював. Моя основна тема програми - <style name = "AppTheme" parent = "Theme.AppCompat.NoActionBar">
Яр,

3
Це спрацювало. Це більш доречно, ніж прийнята відповідь.
Доменіко

87

Ось найпростіший спосіб досягнення світлової та темної теми для app:themeпанелі інструментів. Вам потрібно змінити значення тегу панелі інструментів

  • Для чорної заголовка панелі інструментів та чорної стрілки вгору панель інструментів повинна реалізовувати наступну тему:

додаток: theme = "@ style / ThemeOverlay.AppCompat.Light"

Чорний заголовок панелі інструментів та стрілка вгору

  • Для білого заголовка панелі інструментів та білої стрілки вгору ваша панель інструментів повинна реалізовувати наступну тему:

додаток: theme = "@ style / ThemeOverlay.AppCompat"

Білий заголовок панелі інструментів та стрілка вгору


66
Для білого заголовка панелі інструментів та білої стрілки вгору використовуйте таку тему: android: theme = "@ style / ThemeOverlay.AppCompat.Dark.ActionBar"
Patil

Я намагаюся зрозуміти, чому він називається ThemeOverlay? Чому я не можу тут використовувати просто простий Theme.AppCompat.Dark.ActionBar?
Гакет

@ ch3tanz Ви використовуєте ActionBar або панель інструментів? Чому ви використовуєте стилі ActionBar?
f470071

@ f470071 Я використовую панель інструментів. Це просто стиль, який підтримуватиметься у всіх версіях. Ви можете використовувати стилі Material Design, якщо ваша програма націлена вище на Lollipop.
ch3tanz

Theme.AppCompat.Light.DarkActionBarв моєму випадку.
Evi Song

30

Для білого заголовка панелі інструментів та білої стрілки вгору використовуйте таку тему:

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

Велике спасибі, перш за все вирішити тільки це працює для мене.
Md Juyel Rana,

21

Використовуй це:

<style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
  <item name="colorControlNormal">@color/white</item> 
</style>

5
Це слід прийняти. Кожна відповідь тут просто замінити піктограму, а не її колір.
Michał Jabłoński

12

Спробуйте це,

final Drawable upArrow = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
upArrow.setColorFilter(getResources().getColor(R.color.grey), PorterDuff.Mode.SRC_ATOP);
getSupportActionBar().setHomeAsUpIndicator(upArrow);

6

Для цього не потрібно міняти стиль. Після налаштування панелі інструментів як панелі дій ви можете кодувати так

android.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
android.getSupportActionBar().setHomeAsUpIndicator(R.drawable.back);
//here back is your drawable image

Але ви не можете змінити колір стрілки назад цим методом


6

Якщо ви хочете білу кнопку повернення (←) і білу назву панелі інструментів, виконайте наступне:

<android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
    </android.support.design.widget.AppBarLayout>

Змініть тему Darkна, Lightякщо вам потрібна чорна кнопка повернення (←) і чорна назва панелі інструментів.


6

Просто використовуйте MaterialToolbarта перевизначте кольори за замовчуванням:

    <com.google.android.material.appbar.MaterialToolbar
        style="@style/Widget.MaterialComponents.Toolbar.Primary"
        android:theme="@style/MyThemeOverlay_Toolbar"
        ..>

з:

  <style name="MyThemeOverlay_Toolbar" parent="ThemeOverlay.MaterialComponents.Toolbar.Primary">
    <!-- color used by navigation icon and overflow icon -->
    <item name="colorOnPrimary">@color/...</item>
  </style>

введіть тут опис зображення

Якщо ви використовуєте androidx.appcompat.widget.Toolbarабо MaterialToolbar з типом за замовчуванням ( Widget.MaterialComponents.Toolbar), ви можете використовувати:

<androidx.appcompat.widget.Toolbar
    android:theme="@style/MyThemeOverlay_Toolbar2"

з:

  <style name="MyThemeOverlay_Toolbar2" parent="ThemeOverlay.MaterialComponents.Toolbar.Primary">
    <!-- This attributes is used by title -->
    <item name="android:textColorPrimary">@color/white</item>

    <!-- This attributes is used by navigation icon and overflow icon -->
    <item name="colorOnPrimary">@color/secondaryColor</item>
  </style>

5

Ви можете використовувати свій власний значок, використовуючи app:navigationIconі для кольору заголовкаapp:titleTextColor

Приклад:

<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?actionBarSize"
        android:background="@color/colorPrimary"
        app:navigationIcon="@drawable/ic_arrow_back_white_24dp"
        app:titleTextColor="@color/white" />

Це спрацювало для мене, просто встановив будь-яку піктограму за допомогою цього рядкаapp:navigationIcon="@drawable/ic_back_black"
Абхішек,

поляна це допомогло.
Мохамед Наге

4

Я думаю, якщо тема повинна генерувати якусь проблему, але її динамічно встановлена ​​чорна стрілка. Тому я запропонував спробувати цю.

Drawable backArrow = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
backArrow.setColorFilter(getResources().getColor(R.color.md_grey_900), PorterDuff.Mode.SRC_ATOP);
getSupportActionBar().setHomeAsUpIndicator(backArrow);

2
Чим ваше рішення відрізняється від @Parth Bhayani?
CoolMind

3

Я використовую <style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar>тему в моєму додатку для Android, а в темі NoActionBar colorControlNormalвластивість використовується для зміни кольору навігаційного значка за замовчуванням стрілка кнопки Назад на моїй панелі інструментів

styles.xml

<style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
  <item name="colorControlNormal">@color/your_color</item> 
</style>

2

Просто і без турбот

 <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"
                app:titleTextColor="@color/white"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

        </android.support.design.widget.AppBarLayout>

        <include layout="@layout/testing" />

    </android.support.design.widget.CoordinatorLayout>

2

Я зробив це таким чином, використовуючи бібліотеку компонентів матеріалу:

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <item name="drawerArrowStyle">@style/AppTheme.DrawerArrowToggle</item>
</style>

<style name="AppTheme.DrawerArrowToggle" parent="Widget.AppCompat.DrawerArrowToggle">
    <item name="color">@android:color/white</item>
</style>

це працює: це дозволяє змінити колір значка меню гамбургера.
lnaie

1

Ви можете додати цей код у свій клас Java. Але ви повинні створити векторний актив раніше, щоб ви могли налаштувати стрілку назад.

actionBar.setHomeAsUpIndicator(R.drawable.ic_arrow_back_black_24dp);

0

Для стилю панелі інструментів на Android 21+ це трохи інше.

<style name="DarkTheme.v21" parent="DarkTheme.v19">
        <!-- toolbar background color -->
        <item name="android:navigationBarColor">@color/color_primary_blue_dark</item>
        <!-- toolbar back button color -->
        <item name="toolbarNavigationButtonStyle">@style/Toolbar.Button.Navigation.Tinted</item>
    </style>

    <style name="Toolbar.Button.Navigation.Tinted" parent="Widget.AppCompat.Toolbar.Button.Navigation">
        <item name="tint">@color/color_white</item>
    </style>

-1

Якщо ви хочете, щоб колір системи був білим, тоді ви можете використовувати цей код

<com.google.android.material.appbar.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:elevation="0dp"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar_notification"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:contentInsetLeft="0dp"
            app:contentInsetStart="0dp"
            app:contentInsetStartWithNavigation="0dp">

            <include layout="@layout/action_bar_notification" />
        </androidx.appcompat.widget.Toolbar>
    </com.google.android.material.appbar.AppBarLayout>

Примітка: - android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" є ключовим

Паста знаходиться у вашій діяльності, де ви хочете показати кнопку повернення на панелі дій

final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_notification);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(false);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.