Opción 1) La forma rápida y sencilla (solo barra de herramientas)
Desde appcompat-v7-r23, puede utilizar los siguientes atributos directamente en Toolbar
su estilo o en su estilo:
app:titleTextColor="@color/primary_text"
app:subtitleTextColor="@color/secondary_text"
Si su SDK mínimo es 23 y usa nativo, Toolbar
simplemente cambie el prefijo del espacio de nombres a android
.
En Java puede utilizar los siguientes métodos:
toolbar.setTitleTextColor(Color.WHITE);
toolbar.setSubtitleTextColor(Color.WHITE);
Estos métodos toman un color int, no un ID de recurso de color.
Opción 2) Anular el estilo de la barra de herramientas y los atributos del tema
diseño / xxx.xml
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.MyApp.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
style="@style/Widget.MyApp.Toolbar.Solid"/>
valores / estilos.xml
<style name="Widget.MyApp.Toolbar.Solid" parent="Widget.AppCompat.ActionBar">
<item name="android:background">@color/actionbar_color</item>
<item name="android:elevation" tools:ignore="NewApi">4dp</item>
<item name="titleTextAppearance">...</item>
</style>
<style name="ThemeOverlay.MyApp.ActionBar" parent="ThemeOverlay.AppCompat.ActionBar">
<!-- Parent theme sets colorControlNormal to textColorPrimary. -->
<item name="android:textColorPrimary">@color/actionbar_title_text</item>
</style>
¡Ayuda! ¡Mis iconos también cambiaron de color!
@PeterKnut informó que esto afecta el color del botón de desbordamiento, el botón del cajón de navegación y el botón de retroceso. También cambia el color del texto de SearchView
.
En cuanto a los colores de los iconos: la colorControlNormal
herencia de
android:textColorPrimary
para temas oscuros (blanco sobre negro)
android:textColorSecondary
para temas claros (negro sobre blanco)
Si aplica esto al tema de la barra de acciones , puede personalizar el color del icono.
<item name="colorControlNormal">#de000000</item>
Hubo un error en appcompat-v7 hasta r23 que requirió que también anularas la contraparte nativa de esta manera:
<item name="android:colorControlNormal" tools:ignore="NewApi">?colorControlNormal</item>
¡Ayuda! ¡Mi SearchView es un desastre!
Nota: esta sección posiblemente esté obsoleta.
Dado que usa el widget de búsqueda que, por alguna razón, usa una flecha hacia atrás diferente (no visualmente, técnicamente) que la que se incluye con appcompat-v7, debe configurarlo manualmente en el tema de la aplicación . Los dibujables de la biblioteca de soporte se tiñen correctamente. De lo contrario, siempre sería blanco.
<item name="homeAsUpIndicator">@drawable/abc_ic_ab_back_mtrl_am_alpha</item>
En cuanto al texto de la vista de búsqueda ... no hay una manera fácil. Después de buscar en su fuente, encontré una manera de acceder a la vista de texto. No he probado esto, así que avíseme en los comentarios si esto no funcionó.
SearchView sv = ...; // get your search view instance in onCreateOptionsMenu
// prefix identifier with "android:" if you're using native SearchView
TextView tv = sv.findViewById(getResources().getIdentifier("id/search_src_text", null, null));
tv.setTextColor(Color.GREEN); // and of course specify your own color
Bonificación: anule el estilo de ActionBar y los atributos del tema
El estilo apropiado para una barra de acción de acción predeterminada appcompat-v7 se vería así:
<!-- ActionBar vs Toolbar. -->
<style name="Widget.MyApp.ActionBar.Solid" parent="Widget.AppCompat.ActionBar.Solid">
<item name="background">@color/actionbar_color</item> <!-- No prefix. -->
<item name="elevation">4dp</item> <!-- No prefix. -->
<item name="titleTextStyle">...</item> <!-- Style vs appearance. -->
</style>
<style name="Theme.MyApp" parent="Theme.AppCompat">
<item name="actionBarStyle">@style/Widget.MyApp.ActionBar.Solid</item>
<item name="actionBarTheme">@style/ThemeOverlay.MyApp.ActionBar</item>
<item name="actionBarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item>
</style>