Barra de herramientas de AppCompat: establece el tema de la barra de herramientas desde el tema superior
Tengo una aplicación "light" con:
<style name="Theme.MyTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">@color/primary</item> <item name="colorPrimaryDark">@color/primary_dark</item> <item name="colorAccent">@color/accent</item> <!-- etc. --> </style>
Quiero que mi Toolbar
sea de temática oscura, así que he configurado el siguiente estilo, tal como sugiere Chris Banes :
- Android Support Design TabLayout: Centro de Gravedad y Modo Scrollable
- Cómo implementar Diseño de materiales Animaciones de superficie coreográficas
- ¿Qué tamaño deben tener los iconos de Barra de Acción (Barra de herramientas) en el nuevo diseño de Material Android?
- ¿Cómo imitar la aplicación de Lollipop teléfono, con el cambio de tamaño de los elementos superiores antes de que el contenido desplazable?
- BottomNavigationView no es de ancho completo
<style name="Theme.MyTheme.Toolbar" parent="ThemeOverlay.AppCompat.Dark.ActionBar"> <!-- stuff --> </style>
Luego, al agregar android:theme="@style/Theme.ByodTheme.Toolbar"
a mi android.support.v7.widget.Toolbar
, todo funciona como se esperaba (aunque la vista previa de Android Studio no muestra colores blancos para el título , Funciona en dispositivos):
Ahora, en lugar de especificar android:theme
para cada barra de herramientas en mi aplicación, me gustaría especificar el estilo en mi tema principal y olvidarlo. He intentado la propiedad toolbarStyle
, pero parece que no funciona como se pretende, ya que completamente desorden las propiedades estándar:
También he hecho otros intentos haciendo heredar el tema de la barra de herramientas de Widget.AppCompat.Toolbar
, y cambiando titleTextAppearance
y subtitleTextAppearance
, pero luego parece imposible cambiar el color del icono de desbordamiento (sí, he intentado establecer actionOverflowButtonStyle
y heredar ese estilo Desde Widget.AppCompat.ActionButton.Overflow
, sin éxito en el cambio del color del icono de desbordamiento).
¿Hay una manera de especificar, desde un solo punto, el tema principal de cada barra de herramientas en mi aplicación?
- Diseño del material "Delightful Details" Implementación
- Cambiar el color ScrollBar / FastScroll de ListView?
- Biblioteca de soporte de diseño de materiales
- Android L Vista previa barra de acción color
- Efecto de ondulación de Android 5+ remoteviews
- Cambiar el estilo del cuadro de diálogo AccountPicker de Google Play Services
- Cheesesquare: enterAlways produce un diseño incorrecto
- ¿Cómo quitar el color tint de drawables en NavigationView?
Puede utilizar un atributo personalizado para esto, básicamente, sólo configure sus barras de herramientas para utilizar un valor personalizado que definirá en el tema.
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" android:theme="?attr/toolbar_theme" />
La parte importante es simplemente android:theme="?attr/toolbar_theme"
que hace referencia a un atributo personalizado del tema actual.
Deberá declarar este atributo en algún lugar, así:
<resources> <attr name="toolbar_theme" format="reference" /> </resources>
A continuación, puede definir qué valor desea que utilice la barra de herramientas asignando un valor a toolbar_theme
en su tema. Por ejemplo, para usar Theme.MyTheme.Toolbar
puedes definirlo de la siguiente manera:
<style name="Theme.MyTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">@color/primary</item> <item name="colorPrimaryDark">@color/primary_dark</item> <item name="colorAccent">@color/accent</item> <!-- etc. --> <item name="toolbar_theme">@style/Theme.MyTheme.Toolbar</item> </style>
Lo bueno de usar un atributo es que permite que tu aplicación tenga varios temas, y ese único recurso de barra de herramientas usará cualquier valor que hayas establecido dentro del tema.
Si entiendo la pregunta correctamente, desea definir el tema de su aplicación una vez y aplicar todo el estilo a todas las barras de herramientas en cada actividad / fragmento.
Si es así, recomendaría este enfoque:
<style name="MyTheme" parent="Theme.AppCompat.NoActionBar"> <item name="android:textColorPrimary">@color/MyColorPrimaryText</item> <item name="android:windowBackground">@color/MyColorWindowBackground</item> <item name="colorPrimary">@color/MyColorPrimary</item> <item name="colorPrimaryDark">@color/MyColorPrimaryDark</item> <item name="colorAccent">@color/MyColorAccent</item> <item name="colorControlNormal">@color/MyColorControlNormal</item> <item name="colorControlHighlight">@color/MyColorControlHighlight</item> <item name="toolbarStyle">@style/MyToolbar</item> <item name="windowActionModeOverlay">true</item> <item name="actionModeBackground">@color/MyColorPrimaryDark</item> </style> <style name="MyToolbar" parent="Widget.AppCompat.Toolbar"> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">wrap_content</item> <item name="android:minHeight">@dimen/MyToolbarMinHeight</item> <item name="android:gravity">center_vertical</item> <item name="android:background">@color/MyColorPrimary</item> <item name="android:elevation" tools:ignore="NewApi">10dp</item> <item name="theme">@style/MyToolbarTheme</item> </style> <style name="MyToolbarTheme" parent="ThemeOverlay.AppCompat.ActionBar"> <item name="android:textColorPrimary">@color/MyColorPrimaryText</item> <item name="colorControlNormal">@color/MyToolbarColorControlNormal</item> <item name="colorControlHighlight">@color/MyToolbarColorControlHighlight</item> </style>
Entonces en su manifiesto:
<application android:name=".MyApp" android:theme="@style/MyTheme"> <activity android:name=".MyActivity1"/> <activity android:name=".MyActivity2"/> </application>
A continuación, en los archivos de diseño de la actividad, incluya la barra de herramientas con:
style="?attr/toolbarStyle"
Así que el archivo de diseño myActivity1.xml se vería así:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.Toolbar android:id="@+id/appBar" android:layout_width="match_parent" android:layout_height="wrap_content" style="?attr/toolbarStyle" /> <!-- ETC. --> </LinearLayout>
Y observe que para cambiar el color del botón de retroceso de la navegación o los colores del botón de desbordamiento, puede establecer:
<item name="colorControlNormal">@color/MyColorControlNormal</item> <item name="colorControlHighlight">@color/MyColorControlHighlight</item>
Y:
<item name="android:textColorPrimary">@color/MyColorPrimaryText</item>
Se puede utilizar para actualizar el color de texto de la barra de acciones, pero se debe definir en el tema de la barra de herramientas.
Espero que esto ayude.
- PushPlugin registro va a errorhandler mostrando 'Clase no encontrada' con cordova 4.0.0 para plataforma android
- LibGDX pausa en funcionamiento durante unos segundos