Intereting Posts
Как настроить CirclePageIndicator? Ошибка: не удается подключить пустой файл в приложении GMAIL с помощью поставщика файлов Как изменить дизайн и цвет фона прядильщика для Android? Как использовать и настраивать новый AlertDialog из appCompat 22.1 и выше Как я могу присвоить растровое изображение android растровому изображению из другого размера (алиасы drawable-large-mdpi в drawable-hdpi) Как оценить потенциальный доход от использования AdMob в приложении? Запрос androidFocusFromTouch вызывает меню с первым выделенным элементом Android CollapsingToolbarLayout Название фона Как создать панель пользовательских рейтингов на Android Получение SocketTimeoutExceptions с использованием loopj AsyncHttpClient … есть ли значение тайм-аута, которое я могу установить? Android – создание CSV-файла из значений таблицы Концепция намерения в Android? Как утверждать внутри RecyclerView в Espresso? Что такое фавикон в 2013 году? Как импортировать приложения AOSP (запуск, контакты, …) в Android-Studio?

Как изменить цвет стрелки назад в новой теме материала?

Я обновил свой SDK до API 21, и теперь значок назад / вверх – это черная стрелка, указывающая налево.

Черная спина стрелка

Я бы хотел, чтобы он был серым. Как я могу это сделать?

Например, в Play Store стрелка белая.

Я сделал это, чтобы установить некоторые стили. Я использовал @drawable/abc_ic_ab_back_mtrl_am_alpha для homeAsUpIndicator . То, что доступно, прозрачно (только альфа), но стрелка отображается черным цветом. Интересно, могу ли я установить цвет, как я делаю в DrawerArrowStyle . Или, если единственным решением является создание my @drawable/grey_arrow и использование его для homeAsUpIndicator .

 <!-- Base application theme --> <style name="AppTheme" parent="Theme.AppCompat.Light"> <item name="android:actionBarStyle" tools:ignore="NewApi">@style/MyActionBar</item> <item name="actionBarStyle">@style/MyActionBar</item> <item name="drawerArrowStyle">@style/DrawerArrowStyle</item> <item name="homeAsUpIndicator">@drawable/abc_ic_ab_back_mtrl_am_alpha</item> <item name="android:homeAsUpIndicator" tools:ignore="NewApi">@drawable/abc_ic_ab_back_mtrl_am_alpha</item> </style> <!-- ActionBar style --> <style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid"> <item name="android:background">@color/actionbar_background</item> <!-- Support library compatibility --> <item name="background">@color/actionbar_background</item> </style> <!-- Style for the navigation drawer icon --> <style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle"> <item name="spinBars">true</item> <item name="color">@color/actionbar_text</item> </style> 

Мое решение до сих пор заключалось в том, чтобы взять @drawable/abc_ic_ab_back_mtrl_am_alpha , который кажется белым, и нарисовать его в цвете, который я хочу, используя редактор фотографий. Он работает, хотя я бы предпочел использовать @color/actionbar_text как в DrawerArrowStyle .

Solutions Collecting From Web of "Как изменить цвет стрелки назад в новой теме материала?"

Вы можете достичь этого с помощью кода. Получите обратную стрелку для рисования, измените ее цвет с помощью фильтра и установите его как кнопку возврата.

 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); 

Редакция 1:

Начиная с API 23 (Marshmallow) ресурс abc_ic_ab_back_mtrl_am_alpha вызывается, изменяется на abc_ic_ab_back_material .

Глядя на Toolbar и источник TintManager , drawable/abc_ic_ab_back_mtrl_am_alpha окрашивается в значение атрибута style colorControlNormal .

Я попытался установить это в моем проекте (с <item name="colorControlNormal">@color/my_awesome_color</item> в моей теме), но для меня все еще черный.

Обновление :

Найди его. Вам необходимо установить атрибут actionBarThemeне actionBarStyle ) с помощью colorControlNormal .

Например:

 <style name="MyTheme" parent="Theme.AppCompat.Light"> <item name="actionBarTheme">@style/MyApp.ActionBarTheme</item> <item name="actionBarStyle">@style/MyApp.ActionBar</item> <!-- color for widget theming, eg EditText. Doesn't effect ActionBar. --> <item name="colorControlNormal">@color/my_awesome_color</item> <!-- The animated arrow style --> <item name="drawerArrowStyle">@style/DrawerArrowStyle</item> </style> <style name="MyApp.ActionBarTheme" parent="@style/ThemeOverlay.AppCompat.ActionBar"> <!-- THIS is where you can color the arrow! --> <item name="colorControlNormal">@color/my_awesome_color</item> </style> <style name="MyApp.ActionBarStyle" parent="@style/Widget.AppCompat.Light.ActionBar"> <item name="elevation">0dp</item> <!-- style for actionBar title --> <item name="titleTextStyle">@style/ActionBarTitleText</item> <!-- style for actionBar subtitle --> <item name="subtitleTextStyle">@style/ActionBarSubtitleText</item> <!-- the actionBarTheme doesn't use the colorControlNormal attribute <item name="colorControlNormal">@color/my_awesome_color</item> --> </style> 

Пробовал все предложения выше. Единственный способ, которым мне удалось изменить цвет значка навигации по умолчанию. Кнопка «Назад» на моей панели инструментов – это установить colorControlNormal в базовой теме. Вероятно, из-за того, что родитель использует Theme.AppCompat.Light.NoActionBar

 <style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorControlNormal">@color/white</item> //the rest of your codes... </style> 

Необходимо добавить один атрибут в тему панели инструментов –

 <style name="toolbar_theme" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <item name="colorControlNormal">@color/arrow_color</item> </style> 

Примените этот toolbar_theme к панели инструментов.

ИЛИ

Вы можете напрямую обратиться к своей теме –

 <style name="CustomTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorControlNormal">@color/arrow_color</item> //your code .... </style> 

Просто добавь

 <item name="colorControlNormal">@color/white</item> 

К вашей текущей теме приложения.

Как сказано в большинстве предыдущих комментариев, решение состоит в том, чтобы добавить

<item name="colorControlNormal">@color/white</item> в тему вашего приложения. Но подтвердите, что у вас нет другой темы, определенной в элементе панели инструментов на вашем макете.

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

Ответ Карлеса – правильный ответ, но лишь немногие из методов, таких как getDrawable (), getColor () стали устаревшими в то время, когда я пишу этот ответ . Таким образом, обновленный ответ будет

 Drawable upArrow = ContextCompat.getDrawable(context, R.drawable.abc_ic_ab_back_mtrl_am_alpha); upArrow.setColorFilter(ContextCompat.getColor(context, R.color.white), PorterDuff.Mode.SRC_ATOP); getSupportActionBar().setHomeAsUpIndicator(upArrow); 

Следуя некоторым другим запросам stackoverflow, я обнаружил, что вызов ContextCompat.getDrawable () аналогичен

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { return resources.getDrawable(id, context.getTheme()); } else { return resources.getDrawable(id); } 

ContextCompat.getColor () похож на

 public static final int getColor(Context context, int id) { final int version = Build.VERSION.SDK_INT; if (version >= 23) { return ContextCompatApi23.getColor(context, id); } else { return context.getResources().getColor(id); } } 

Ссылка 1: ContextCompat.getDrawable ()

Ссылка 2: ContextCompat.getColor ()

Если вы используете Toolbar , вы можете попробовать это

 Drawable drawable = toolbar.getNavigationIcon(); drawable.setColorFilter(ContextCompat.getColor(appCompatActivity, colorId), PorterDuff.Mode.SRC_ATOP); 

Я нашел решение, которое работает до Lollipop. Установите «colorControlNormal» в «actionBarWidgetTheme», чтобы изменить цвет homeAsUpIndicator. Изменив ответ рокгекко сверху, чтобы выглядеть так:

 <style name="MyTheme" parent="Theme.AppCompat.Light"> <item name="actionBarTheme">@style/MyApp.ActionBarTheme</item> <item name="actionBarStyle">@style/MyApp.ActionBar</item> <!-- color for widget theming, eg EditText. Doesn't effect ActionBar. --> <item name="colorControlNormal">@color/my_awesome_color</item> <!-- The animated arrow style --> <item name="drawerArrowStyle">@style/DrawerArrowStyle</item> <!-- The style for the widgets on the ActionBar. --> <item name="actionBarWidgetTheme">@style/WidgetStyle</item> </style> <style name="WidgetStyle" parent="style/ThemeOverlay.AppCompat.Light"> <item name="colorControlNormal">@color/my_awesome_color</item> </style> 

На compileSdkVersoin 25 вы можете сделать следующее:

styles.xml

 <style name="AppTheme" parent="Theme.AppCompat.Light"> <item name="android:textColorSecondary">@color/your_color</item> </style> 

Используйте ниже метод:

 private Drawable getColoredArrow() { Drawable arrowDrawable = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha); Drawable wrapped = DrawableCompat.wrap(arrowDrawable); if (arrowDrawable != null && wrapped != null) { // This should avoid tinting all the arrows arrowDrawable.mutate(); DrawableCompat.setTint(wrapped, Color.GRAY); } return wrapped; } 

Теперь вы можете установить drawable с помощью:

 getSupportActionBar().setHomeAsUpIndicator(getColoredArrow()); 

Еще одно решение, которое может сработать для вас, – не объявлять панель инструментов как панель действий приложения ( setActionBar или setSupportActionBar ) и установить обратную иконку в свой onActivityCreated, используя код, упомянутый в другом ответе на этой странице

 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); toolbar.setNavigationIcon(upArrow); 

Теперь вы не получите onOptionItemSelected вызов onOptionItemSelected при нажатии кнопки «Назад». Однако вы можете зарегистрироваться для этого, используя setNavigationOnClickListener . Вот что я делаю:

 toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { getActivity().onBackPressed(); //or whatever you used to do on your onOptionItemSelected's android.R.id.home callback } }); 

Я не уверен, что это сработает, если вы работаете с элементами меню.

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

Изменить значок Nav Icon Color

Конечная конвертация значка меню Цвет

В style.xml:

 <style name="MyMaterialTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="windowNoTitle">true</item> <item name="windowActionBar">false</item> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="drawerArrowStyle">@style/DrawerArrowStyle</item> <item name="android:textColor">@color/colorAccent</item> </style> <style name="DrawerArrowStyle" parent="@style/Widget.AppCompat.DrawerArrowToggle"> <item name="spinBars">true</item> <item name="color">@color/colorPrimaryDark</item> </style> In Mainfests.xml : <activity android:name=".MainActivity" android:theme="@style/MyMaterialTheme.Base"></activity> 

попробуй это

 public void enableActionBarHomeButton(AppCompatActivity appCompatActivity, int colorId){ final Drawable upArrow = ContextCompat.getDrawable(appCompatActivity, R.drawable.abc_ic_ab_back_material); upArrow.setColorFilter(ContextCompat.getColor(appCompatActivity, colorId), PorterDuff.Mode.SRC_ATOP); android.support.v7.app.ActionBar mActionBar = appCompatActivity.getSupportActionBar(); mActionBar.setHomeAsUpIndicator(upArrow); mActionBar.setHomeButtonEnabled(true); mActionBar.setDisplayHomeAsUpEnabled(true); } 

Вызов функции:

 enableActionBarHomeButton(this, R.color.white); 

Просто удалите android:homeAsUpIndicator и homeAsUpIndicator из вашей темы, и все будет хорошо. Атрибут color в вашем стиле DrawerArrowStyle должен быть достаточным.

Если вы хотите изменить цвет кнопки со стрелкой для всех значков в вашей теме, просто переопределите файл по умолчанию в вашей папке с возможностью копирования. Имя файла по умолчанию – «abc_ic_ab_back_mtrl_am_alpha.png».

Мы столкнулись с одной и той же проблемой, и все, что мы хотели, это установить

Приложение: collapseIcon

Атрибут в панели инструментов в конце, который мы не нашли, поскольку он не очень хорошо документирован 🙂

 <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="@dimen/toolbarHeight" app:collapseIcon="@drawable/collapseBackIcon" /> 

Вы можете изменить цвет значка навигации программно следующим образом:

 mToolbar.setNavigationIcon(getColoredArrow()); private Drawable getColoredArrow() { Drawable arrowDrawable = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha); Drawable wrapped = DrawableCompat.wrap(arrowDrawable); if (arrowDrawable != null && wrapped != null) { // This should avoid tinting all the arrows arrowDrawable.mutate(); DrawableCompat.setTintList(wrapped, ColorStateList.valueOf(this.getResources().getColor(R.color.your_color))); } } return wrapped; } 

Если нет лучшего решения …

То, что я сделал, это взять изображения @drawable/abc_ic_ab_back_mtrl_am_alpha , которые кажутся белыми, и нарисовать их в цвете, который я хочу, используя редактор фотографий.