有没有办法根据活动上设置的主题来更改样式?例如,假设我的活动有一个样式设置为TextViewStyle的textview
<TextView style="@style/TextViewStyle" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Text"/>
这是我的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>
在我的Styles.xml中,我有两个主题
<style name="AppThemeLight" parent="android:Theme.Material.Light"> </style> <style name="AppThemeDark" parent="android:Theme.Material"> </style>
现在,当我将主题设置为Dark时,我希望此主题覆盖我在TextViewStyle中设置的某些值.我怎么能这样做?我尝试了以下,但它不起作用
<!-- 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>
解决方法
好的,这是我如何在发布问题后1小时实现这一目标!可能对别人有帮助!
首先在attrs.xml中我定义了以下内容:
<attr name="textBlockStyle" format="reference"/>
然后在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>
请注意我如何使用我定义的属性来引用样式
<item name="textBlockStyle">@style/AppThemeLightTextBlockStyle</item>
最后,在我的元素上,我将样式设置为“style =”?textBlockStyle“:
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" style="?textBlockStyle" android:text="...." android:gravity="center" />
当我将活动主题设置为Dark或Light时,将使用正确的textButtenStyle