2015-05-27 20 views
5

C'è un modo per modificare uno stile in base al tema impostato su un'attività? per esempio, si supponga che la mia attività ha un TextView con uno stile impostato TextViewStyleAndroid - Sostituzione di uno stile per tema

<TextView 
    style="@style/TextViewStyle"   
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Text"/> 

Questo è il mio TextViewStyle

<style name="TextViewStyle" parent="android:style/Widget.TextView"> 
     <item name="android:textStyle">bold</item> 
     <item name="android:textSize">8sp</item> 
     <item name="android:textColor">@android:color/holo_blue_dark</item> 
    </style> 

Nel mio styles.xml ho due temi

<style name="AppThemeLight" parent="android:Theme.Material.Light"> 

    </style> 


    <style name="AppThemeDark" parent="android:Theme.Material"> 

    </style> 

Ora , quando ho il mio tema impostato su Dark, voglio che questo tema sovrascriva alcuni valori che ho impostato nel mio TextViewStyle. Come potrei farlo? Ho provato quanto segue, ma non funziona

<!-- Override TextViewStyle style for AppThemeLight--> 
      <style name ="AppThemeLight.TextBlockStyle" parent="@style/TextBlockStyle"> 
       <item name="android:textColor">@color/my_purple</item> 
       <item name="android:textSize">20sp</item> 
      </style> 
<!-- Override TextViewStyle style for AppThemeDark--> 
      <style name ="AppThemeDark.TextBlockStyle" parent="@style/TextBlockStyle"> 
       <item name="android:textColor">@color/my_green</item> 
       <item name="android:textSize">40sp</item> 
      </style> 

risposta

11

Ok ecco come ho ottenuto questo, 1 ora dopo aver postato la domanda! Potrebbe essere utile per qualcun altro!

Prima in attrs.xml ho definito il seguente:

<attr name="textBlockStyle" format="reference"/> 

Il mio style.xml

<style name="TextBlockStyle" parent="android:style/Widget.TextView"> 
     <item name="android:textStyle">bold</item> 
     <item name="android:textSize">8sp</item> 
     <item name="android:textColor">@android:color/holo_blue_dark</item> 
    </style> 

    <style name="AppThemeLight" parent="android:Theme.Material.Light"> 
     <item name="android:windowNoTitle">true</item> 
     <item name="textBlockStyle">@style/AppThemeLightTextBlockStyle</item> 
    </style> 


    <style name="AppThemeDark" parent="android:Theme.Material"> 
     <item name="android:windowNoTitle">true</item> 
     <item name="textBlockStyle">@style/AppThemeDarkTextBlockStyle</item> 
    </style> 



    <!-- Override TextBlockStyle style for AppThemeLight --> 
    <style name ="AppThemeLightTextBlockStyle" parent="@style/TextBlockStyle"> 
     <item name="android:textColor">@color/my_purple</item> 
     <item name="android:textSize">20sp</item> 
    </style> 
    <!-- Override MyButton style for AppThemeDark --> 
    <style name ="AppThemeDarkTextBlockStyle" parent="@style/TextBlockStyle"> 
     <item name="android:textColor">@color/my_green</item> 
     <item name="android:textSize">40sp</item> 
    </style> 

Notate come io uso l'attributo ho definito per fare riferimento a uno stile

<item name="textBlockStyle">@style/AppThemeLightTextBlockStyle</item> 

Infine, sul mio elemento ho impostato lo stile come questo "style ="? TextBlockStyle ":

<TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     style="?textBlockStyle" 
     android:text="THIS IS SOME STLE...." 
     android:gravity="center" /> 

quando ho impostato il mio tema di attività di scuro o chiaro, l'textButtenStyle corretta verrà utilizzato

0

aggiungere un elemento TEXTSTYLE al vostro stile di attività e di renderlo uguale allo stile desiderato, quindi quando l'attività viene caricato tutti textViews all'interno avrà lo stile specificato all'interno del suo Tema a meno che non lo sovrascruisci nel tuo testoView

+0

hmm non sicuro di ottenere cosa intendi .... potresti fornire un piccolo esempio? Voglio essere in grado di sovrascrivere un textStyle predefinito per tema. – AhmedW

+0

Prova qualcosa come @ style/yourTextViewStyle All'interno del tuo stile di attività – Exception

0

Provare qualcosa di simile

<item name="android:textAppearance">@style/yourTextViewStyle</item> 

Dentro il tuo stile di attività

Problemi correlati