Como faço para estilizar Toolbar AppCompat - v7 como Theme.AppCompat.Light.DarkActionBar ?

? Liminal @ | Original: StackOverFlow
---

Estou tentando recriar a aparência de Theme.AppCompat.Light.DarkActionBar com a nova barra de ferramentas biblioteca de suporte .

Se eu escolher Theme.AppCompat.Light minha barra de ferramentas será a luz e se eu escolher Theme.AppCompat será escuro. ( Tecnicamente, você tem que usar a versão .NoActionBar, mas tanto quanto eu posso dizer a única diferença é

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

Agora não há nenhuma Theme.AppCompat.Light.DarkActionBar, mas ingenuamente eu pensei que seria bom o suficiente para apenas fazer a minha própria

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

No entanto, com este minhas barras de ferramentas ainda estão Light temático . Passei horas tentando agora combinações diferentes de mistura the Dark (base) tema eo tema Luz, mas eu simplesmente não consigo encontrar uma combinação que vai me deixar ter fundos claros sobre tudo, mas as barras de ferramentas.

Existe uma maneira de obter o AppCompat.Light.DarkActionBar olhar com importação android.support.v7.widget.Toolbar ' s ?

---

Top 5 Responder

1Yong @

Yout pode tentar este abaixo.

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

E os elementos detalhe que você pode encontrá-los em https://developer.android.com/reference/android/support/v7/appcompat/R.styleable.html#Toolbar

Aqui estão mais algumas: TextAppearance.Widget.AppCompat.Toolbar.Title, TextAppearance.Widget.AppCompat.Toolbar.Subtitle, Widget.AppCompat.Toolbar.Button.Navigation .

Espero que isso pode ajudá-lo .

2oRRs @

A forma recomendada para o estilo da barra de ferramentas para uma Light.DarkActionBar clone seria a utilização de Theme.AppCompat.Light.NoActionBar como pai / tema app e manipular o layout da barra de ferramentas .

O toolbar.xml incluo em todas as atividades é a seguinte:

<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"
    android:minHeight="?attr/actionBarSize"
    android:background="@color/background_material_dark"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

Se você prestar atenção especial a "app : tema" e " app: popupTheme ", você vai ver como adaptar facilmente o estilo às suas necessidades específicas .

Ligação úteis para AppCompat v21 em geral: https://chris.banes.me/2014/10/17/appcompat-v21/

3Liminal @

Ok, depois de ter afundado a maneira muito tempo para esse problema é a maneira que eu consegui obter a aparência que eu estava esperando . Eu estou tornando-se uma resposta em separado para que eu possa colocar tudo em um só lugar.

É uma combinação de fatores.

Em primeiro lugar, não tente obter as barras de ferramentas para jogar bonito através apenas de temas . Parece ser impossível.

Portanto, aplicar temas explicitamente para as barras de ferramentas como em http://stackoverflow.com/a/26504082/301341

layout / toolbar.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" />

No entanto, este é o molho de magia. A fim de realmente obter as cores de fundo que eu estava esperando que você tem que substituir o background atributo em seus temas Toolbar

valores / styles.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>

em seguida, basta incluir o layout da barra de ferramentas em seus outros layouts

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

e você está pronto para ir .

Espero que isso ajude alguém que você não tem que gastar tanto tempo com isso como eu tenho.

( se alguém pode descobrir como fazer este trabalho usando apenas temas, ou seja, não ter de aplicar os temas explicitamente nos arquivos de layout eu vou com prazer apoiar a sua resposta em vez disso)

EDIT:

Então, aparentemente, postando uma resposta mais completa era um ímã downvote, então eu vou aceitar a resposta imcomplete acima, mas deixar essa resposta aqui no caso de alguém realmente precisa dele. Sinta-se livre para manter downvoting se isso te faz feliz embora .

4LordRaydenMK @

Isso funcionou para mim : arquivo values.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>

Update: A citação de http://gmariotti.blogspot.com/2014/11/android-5-tip-about-toolbar-and-style.html .

Com a nova barra de ferramentas que você pode aplicar um estilo e um tema.       Eles são diferentes !       O estilo é local para a exibição da barra de ferramentas, por exemplo, a cor de fundo.       O app: tema é, ao invés global para todos os elementos da interface inflados na barra de ferramentas, por exemplo, a cor do título e ícones.

5Don @

A maneira mais limpa que eu encontrei para fazer isso é criar uma criança de ' ThemeOverlay.AppCompat.Dark.ActionBar ' . No exemplo, eu definir a cor de fundo da barra de ferramentas para RED e cor do texto para azul.

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

Você pode então aplicar o seu tema para a barra de ferramentas :

<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"/>