5

Questo è il mio app tema:Diversi stili colorControlActivated in Android

<style name="BaseTheme" parent="Theme.AppCompat.Light"> 
    ... 
    <item name="colorControlActivated">@color/default_orange</item> 
    ... 
</style> 
... 
<style name="Switch" parent="Material.Widget.Switch"> 
    <item name="colorControlActivated">@color/default_green</item> 
</style> 

E se uso il switch stile:

<com.rey.material.widget.Switch 
    style="@style/Switch" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:checked="false"/> 

Il colorControlActivated utilizzato è l'uno dentro l'BaseTheme (arancione) invece dello Switch uno (verde).
Perché sta succedendo? Non è possibile avere colorControlActivated diversi per visualizzazioni diverse?

Grazie.

+1

Leggi l'articolo di Chris Banes su [Theme vs Style] (https://chris.banes.me/2014/11/12/theme-vs-style/) per capire perché questo non funziona e come ottenere il risultato effetto desiderato. – alanv

+0

Buon articolo, ho seguito l'esempio di Chris e sostituito "style" con "android: theme" ma ancora non funziona:/ – GuilhE

+0

Ciao @GuilhE, hai mai avuto modo di risolvere questo? Sono nello stesso identico posto adesso – Nemesis

risposta

4

Il problema principale è che l'attributo colorControlActivated nel tema dell'attività ha la preferenza per quell'attributo in qualsiasi stile personalizzato definito e applicato a viste specifiche.

la soluzione è (e questa soluzione ignora l'attributo per tutti gli elementi nella stessa attività nello stesso modo) per creare un nuovo tema e applicare questo tema per la vostra attività nel manifesto. Questo tema potrebbe ereditare dal tema principale e sovrascrivere solo gli attributi necessari.

I temi:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <!-- items--> 
    <item name="colorControlActivated">@android:color/white</item> 
    <!-- items--> 
</style> 

<style name="lightAppTheme" parent="AppTheme" > 
    <item name="colorControlActivated">@color/colorPrimary</item> 
</style> 

il manifesto:

<application 
    android:name=".application.appname" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme"> 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/title_activity_main" 
     android:theme="@style/lightAppTheme" 
     android:screenOrientation="portrait"></activity> 
</application> 

Spero che questo aiuta a chiunque che entra in questo dato che mi ha preso alcune ore per farlo funzionare.

Per rendere diversi elementi della stessa attività per utilizzare diversi colorControlActivated attributi, andare a questo answer.