2015-05-27 10 views
5

Czy istnieje sposób na zmianę stylu w zależności od tego, jaki temat jest ustawiony w działaniu? Na przykład, załóżmy, że moja działalność ma TextView ze stylem określonym celu TextViewStyleAndroid - przesłonięcie stylu na jeden motyw

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

To mój 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> 

W moim Styles.xml Mam dwa tematy

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

    </style> 


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

    </style> 

teraz , gdy mój motyw jest ustawiony na Dark, chcę, aby ten motyw zastąpił niektóre wartości ustawione w moim TextViewStyle. Jak mogłem to zrobić? Próbowałem następujących, ale nie działa

<!-- 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> 

Odpowiedz

11

OK, oto jak to osiągnąłem, godzinę po zamieszczeniu pytania! Może być pomocny dla kogoś innego!

pierwsze w attrs.xml I zdefiniowano następujące:

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

in moim 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> 

Wskazówki jak ja użyć atrybutu zdefiniowałem odwołać styl

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

Wreszcie na moim elemencie ustawiłem styl "style ="? TextBlockStyle ":

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

kiedy ustawić mojej działalności motyw do ciemnego lub jasnego, prawidłowa textButtenStyle zostaną wykorzystane

0

Dodaj element textstyle do stylu działalności i sprawiają, że równa żądanej stylu, a następnie, gdy działalność jest załadowany wszystkie TextView wewnątrz będzie mieć styl określony wewnątrz jej motyw, chyba że przesłonisz go w swoim tekstemView

+0

hmm nie wiem, mam co masz na myśli ... czy możesz podać mały przykład? Chcę mieć możliwość przesłonięcia domyślnego textStyle na temat. – AhmedW

+0

Spróbuj coś w stylu: @ style/yourTextViewStyle Wewnątrz swojego stylu aktywności – Exception

0

Spróbuj czegoś podobnego

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

Wewnątrz stylu działalności

Powiązane problemy