2015-04-24 29 views
5

in base ai documenti di google, dovrei essere in grado di impostare il colore dello sfondo della barra degli strumenti utilizzando colorPrimary nel tema, ma non funziona. Ecco quello che ho:Colore barra degli strumenti Android non impostato da colorPrimary

styles.xml:

<resources> 

    <!-- Base application theme. --> 
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
     <!-- Customize your theme here. --> 
     <item name="colorPrimary">@color/light_purple</item> 
     <!-- colorPrimaryDark is used for the status bar --> 
     <item name="colorPrimaryDark">@color/dark_purple</item> 
     <!-- colorAccent is used as the default value for colorControlActivated, 
      which is used to tint widgets --> 
     <item name="colorAccent">@color/dark_purple</item> 

     <item name="colorSwitchThumbNormal">@color/light_purple</item> 
    </style> 

</resources> 

layout di attività:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context=".MainActivity"> 
    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:minHeight="?attr/actionBarSize" 
     android:theme="@style/AppTheme" 
     tools:showIn="@layout/activity_main"> 
     <TextView 
      android:id="@+id/pivot_title_image" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:text="toolbar text view" /> 
    </android.support.v7.widget.Toolbar> 
... 
</LinearLayout> 

attività:

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
    } 

ho impostato il mio tema app per AppTheme nel manifesto : android:theme="@style/AppTheme" > Ho installato il supporto per Android appcompat in build.gradle

compile 'com.android.support:appcompat-v7:22.1.0' 

Ma la mia barra degli strumenti, non è ancora colorata. So che posso impostare manualmente il colore di sfondo della barra degli strumenti manualmente nel file di layout, ma non dovrebbe ottenere il colore dal tema? come puoi vedere i colori accesi stanno funzionando.

enter image description here

+0

Penso che si potrebbe voler rimuovere 'android: theme =" @ style/AppTheme "' dalla dichiarazione 'Toolbar' su' activity_main', e impostare lo sfondo della barra degli strumenti come 'android: background ="? Attr/colorPrimary "' – Emmanuel

+0

[This] (http://stackoverflow.com/a/32981192/5164200) è il modo in cui ho risolto il mio problema. Dategli un'occhiata – Fred

+0

Ciò che ha funzionato per me è stato quello di [impostare il tema dell'app nel file manifest] (http://stackoverflow.com/a/39341616/3681880). – Suragch

risposta

4

Toolbar non sarà possibile ottenere il colore primario dal vostro tema. È necessario impostare la seguente proprietà xml della barra degli strumenti

android:background="@color/primary" 

Questa è la mia implementazione di lavoro della barra degli strumenti.

<?xml version="1.0" encoding="utf-8"?> 
    <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="wrap_content" 
     android:background="@color/primary" 
     android:minHeight="?actionBarSize"> 
</android.support.v7.widget.Toolbar> 

Spero che funzioni anche per te.

+1

pensi che si tratti di un bug o di una comunicazione errata nella documentazione dell'app? – Siavash

+0

Io non la penso così. Stai creando il tuo tema personalizzato. E hanno dato la proprietà di sfondo per specificare il colore. Questa non è una barra delle azioni. – ch3tanz

+0

Ho scelto questo come migliore risposta perché è l'unica risposta che ha riconosciuto il fatto che so già come impostare manualmente il colore di sfondo. – Siavash

0

tenta di impostare il colore di sfondo alla barra degli strumenti

Questo ha funzionato per me

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar_main" 
     android:layout_width="match_parent" 
     android:layout_height="?actionBarSize" 
     android:background="@color/primary_color" 
     android:gravity="right" 
     app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

     <ProgressBar 
      android:id="@+id/pb_loading_news" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="right" 
      android:visibility="gone" /> 
    </android.support.v7.widget.Toolbar> 
+2

È preferibile fare riferimento al colore primario come questo: 'android: background ="? Android: attr/colorPrimary "' –

+0

sì sono completamente d'accordo con te –

+0

Quindi la barra degli strumenti NON otterrà automaticamente il colore dal tema? – Siavash

5

È possibile applicare uno stile al tuo Toolbar

stile e il tema sono diversi.

Lo stile è locale nella vista Barra degli strumenti, ad esempio il colore di sfondo.

Il tema è invece globale a tutti gli elementi dell'interfaccia utente gonfiati nella barra degli strumenti, ad esempio il colore del titolo e delle icone.

Ulteriori informazioni here.

<android.support.v7.widget.Toolbar 
     style="@style/HeaderBar"/> 

dove:

<style name="HeaderBar"> 
    <item name="android:background">?colorPrimary</item> 
</style> 

In caso contrario è possibile definire lo sfondo per il vostro Toolbar.

<android.support.v7.widget.Toolbar 
    android:background="?attr/colorPrimary"> 
3

è necessario utilizzare android: attributi prefissati in tema di 5+ Android, come la variante senza prefisso è solo per le app parti compat per le versioni Android < 5.

Quindi si dovrebbe avere uno values/styles.xml per pre-android 5 e uno values-v21/styles.xml per Android 5+.

Negli stili V21 si definisce il tema come segue:

<!-- Base application theme. --> 
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="android:colorPrimary">@color/light_purple</item> 
    <item name="android:colorPrimaryDark">@color/dark_purple</item> 
    <item name="android:colorAccent">@color/dark_purple</item> 
</style> 

come ora definire il colorPrimary attribuiscono una volta semplicemente come colorPrimary per la pre-Lollipop e una volta come android:colorPrimary per Dispositivi lecca-lecca, non è più possibile utilizzare direttamente ?attr/colorPrimary. Invece, come altri qui detto prima, si dovrebbe definire il proprio stile per la barra degli strumenti, ma per entrambi le varianti:

valori/styles.xml:

<style name="Toolbar"> 
    <item name="android:background">?attr/colorPrimary</item> 
</style> 

valori-V21/styles.xml:

<style name="Toolbar"> 
    <item name="android:background">?android:attr/colorPrimary</item> 
</style> 

e utilizzare lo stile per la vostra barra degli strumenti:

<android.support.v7.widget.Toolbar 
    style="@style/Toolbar" 

come non il colore di sfondo e O Gli stili possono essere impostati su tutte le versioni ed è ancora modificabile dallo colorPrimary impostato nei temi.

Problemi correlati