¿Cómo estilo appcompat-v7 Barra de herramientas como Tema.AppCompat.Luz.¿DarkActionBar?


Estoy tratando de recrear el aspecto de Theme.AppCompat.Light.DarkActionBar con la nueva barra de herramientas de la biblioteca de soporte.

Si elijo Theme.AppCompat.Light mi barra de herramientas será clara y si elijo Theme.AppCompat será oscura. (Técnicamente tienes que usar la versión .NoActionBar pero por lo que puedo decir la única diferencia es

<style name="Theme.AppCompat.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="android:windowNoTitle">true</item>
</style>

Ahora no hay {[2] } pero ingenuamente pensé que sería lo suficientemente bueno para hacer mi propio

<style name="Theme.AppCompat.Light.DarkActionBar.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="android:windowNoTitle">true</item>
</style>

Sin embargo, con esto mis barras de herramientas siguen siendo Light temáticas. He pasado horas intentando diferente combinaciones de mezclar el tema Oscuro (base) y el tema Claro, pero no puedo encontrar una combinación que me permita tener fondos claros en todo menos en las barras de herramientas.

¿Hay alguna manera de obtener el aspecto AppCompat.Light.DarkActionBar con los s de import android.support.v7.widget.Toolbar?

Author: bitek, 2014-10-22

7 answers

La forma recomendada de dar estilo a la barra de herramientas para un clon Light.DarkActionBar sería usar Theme.AppCompat.Light.DarkActionbar como tema padre / aplicación y agregar los siguientes atributos al estilo para ocultar la barra de acción predeterminada:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

Luego use lo siguiente como su barra de herramientas:

<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:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</android.support.design.widget.AppBarLayout>

Para modificaciones adicionales, crearía estilos extendiendo ThemeOverlay.AppCompat.Dark.ActionBar y ThemeOverlay.AppCompat.Light reemplazando los que están dentro de AppBarLayout->android:theme y Toolbar->app:popupTheme. También tenga en cuenta que esto recogerá su ?attr/colorPrimary si lo ha establecido en su estilo principal por lo que podría obtener una diferente color de fondo.

Encontrará un buen ejemplo de esto en la plantilla de proyecto actual con un Empty Activity de Android Studio (1.4+).

 199
Author: oRRs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-13 15:27:57

Editar: Después de actualizar a appcompat-v7:22.1.1 y usar AppCompatActivity en lugar de ActionBarActivity mis estilos.xml se ve así:

<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="theme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
</style>

Nota: Esto significa que estoy usando un Toolbar proporcionado por el framework (NO incluido en un archivo XML).

Esto funcionó para mí:
estilo.archivo xml:

<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowActionBar">false</item>
    <item name="theme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
</style>

Actualización: Una cita de El blog de Gabriele Mariotti.

Con la nueva barra de herramientas puede aplicar un estilo y un tema. Son diferentes! El estilo es local a la barra de herramientas ver, por ejemplo, el color de fondo. El tema app: es global para todos los elementos de la interfaz de usuario inflados en la barra de herramientas, por ejemplo, el color del título y los iconos.

 69
Author: LordRaydenMK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-06 10:14:49

Ok después de haber hundido mucho tiempo en este problema, esta es la forma en que me las arreglé para obtener la apariencia que esperaba. Lo estoy haciendo una respuesta separada para que pueda tener todo en un solo lugar.

Es una combinación de factores.

En primer lugar, no intente que las barras de herramientas se reproduzcan bien a través de temas. Parece imposible.

Así que aplica temas explícitamente a tus barras de herramientas como en ORR respuesta

diseño / barra de herramientas.xml

<?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_alignParentTop="true"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    app:theme="@style/Dark.Overlay"
    app:popupTheme="@style/Dark.Overlay.LightPopup" />

Sin embargo, esta es la salsa mágica. Para obtener realmente los colores de fondo que esperaba, debe anular el atributo background en los temas de la barra de herramientas

valores / estilos.xml:

<!-- 
    I expected android:colorBackground to be what I was looking for but
    it seems you have to override android:background
-->
<style name="Dark.Overlay" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="android:background">?attr/colorPrimary</item>
</style>

<style name="Dark.Overlay.LightPopup" parent="ThemeOverlay.AppCompat.Light">
    <item name="android:background">@color/material_grey_200</item>
</style>

Luego solo incluye el diseño de tu barra de herramientas en tus otros diseños

<include android:id="@+id/mytoolbar" layout="@layout/toolbar" />

Y ya está listo.

Espero que esto ayude a alguien más para que no tenga que gastar tanto tiempo en esto como yo tener.

(si alguien puede averiguar cómo hacer que esto funcione usando solo temas, es decir, no tener que aplicar los temas explícitamente en los archivos de diseño, estaré encantado de apoyar su respuesta en su lugar)

EDITAR:

Así que aparentemente publicar una respuesta más completa fue un imán de votos negativos, así que aceptaré la respuesta imcomplete de arriba, pero dejaré esta respuesta aquí en caso de que alguien realmente la necesite. Siéntete libre de seguir votando si te hace feliz.

 31
Author: Liminal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:17:54

La forma más limpia que encontré para hacer esto es crear un hijo de 'ThemeOverlay.AppCompat.Oscuro.ActionBar ". En el ejemplo, establecí el color de fondo de la barra de herramientas en ROJO y el color del texto en AZUL.

<style name="MyToolbar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="android:background">#FF0000</item>
    <item name="android:textColorPrimary">#0000FF</item>
</style>

Luego puede aplicar su tema a la barra de herramientas:

<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_height="wrap_content"
    android:layout_width="match_parent"
    app:theme="@style/MyToolbar"
    android:minHeight="?attr/actionBarSize"/>
 15
Author: Don,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-13 18:54:46

Para personalizar el estilo de la barra de herramientas, primero cree el widget heredador de estilo personalizado de la barra de herramientas.AppCompat.Barra de herramientas, anular propiedades y luego añadirlo al tema de la aplicación personalizada como se muestra a continuación, ver http://www.zoftino.com/android-toolbar-tutorial para más información barra de herramientas y estilos.

   <style name="MyAppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="toolbarStyle">@style/MyToolBarStyle</item>
    </style>
    <style name="MyToolBarStyle" parent="Widget.AppCompat.Toolbar">
        <item name="android:background">#80deea</item>
        <item name="titleTextAppearance">@style/MyTitleTextAppearance</item>
        <item name="subtitleTextAppearance">@style/MySubTitleTextAppearance</item>
    </style>
    <style name="MyTitleTextAppearance" parent="TextAppearance.Widget.AppCompat.Toolbar.Title">
        <item name="android:textSize">35dp</item>
        <item name="android:textColor">#ff3d00</item>
    </style>
    <style name="MySubTitleTextAppearance" parent="TextAppearance.Widget.AppCompat.Toolbar.Subtitle">
        <item name="android:textSize">30dp</item>
        <item name="android:textColor">#1976d2</item>
    </style>
 7
Author: Arnav Rao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-19 04:17:40

Puedes probar esto a continuación.

<style name="MyToolbar" parent="Widget.AppCompat.Toolbar">
    <!-- your code here -->
</style>

Y los elementos de detalle los puedes encontrar en https://developer.android.com/reference/android/support/v7/appcompat/R.styleable.html#Toolbar

Aquí hay algunos más:TextAppearance.Widget.AppCompat.Toolbar.Title, TextAppearance.Widget.AppCompat.Toolbar.Subtitle, Widget.AppCompat.Toolbar.Button.Navigation.

Espero que esto pueda ayudarte.

 6
Author: Yong,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-22 08:35:57

Similar al de Arnav Rao, pero con un padre diferente:

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

    <item name="toolbarStyle">@style/MyToolbar</item>
</style>

<style name="MyToolbar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="android:background">#ff0000</item>
</style>

Con este enfoque, la apariencia de la barra de herramientas está completamente definida en los estilos de la aplicación, por lo que no es necesario colocar ningún estilo en cada barra de herramientas.

 1
Author: craigmj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-15 19:24:21