如何将两种不同的样式应用于android中的一个元素?
Posted
技术标签:
【中文标题】如何将两种不同的样式应用于android中的一个元素?【英文标题】:How to apply two different styles to one element in android? 【发布时间】:2011-06-18 13:56:40 【问题描述】:我有一个 TextView,我想应用一个用于所有 TextView 元素的样式以及另一种我只在特定 Activity 中使用的样式。有没有可能这样做?
【问题讨论】:
【参考方案1】:只是一点点信息,可能会增加问题的整体价值 - 无耻地复制自:http://developer.android.com/guide/topics/ui/themes.html#DefiningStyles
如果你想继承你自己定义的样式,你不必使用 parent 属性。相反,只需将要继承的样式名称作为新样式名称的前缀,用句点分隔。例如,要创建一个继承上面定义的 CodeFont 样式的新样式,但将颜色设为红色,您可以这样创作新样式:
<style name="CodeFont.Red">
<item name="android:textColor">#FF0000</item>
</style>
请注意,标签中没有父属性,但由于 name 属性以 CodeFont 样式名称(这是您创建的样式)开头,因此该样式继承了该样式的所有样式属性。然后,此样式会覆盖 android:textColor 属性以使文本变为红色。您可以将此新样式引用为@style/CodeFont.Red。
您可以通过将名称与句点链接起来,继续进行多次这样的继承。例如,您可以将 CodeFont.Red 扩展为更大,使用:
<style name="CodeFont.Red.Big">
<item name="android:textSize">30sp</item>
</style>
【讨论】:
我觉得有趣的是,即使我以前访问过并研究/浏览过该页面,我也不知道这个有趣且非常有用的花絮。谢谢@Bruiser。【参考方案2】:您可以在 style.xml 中用另一种样式扩展一种样式:
<style name="current_weekday_white" parent="current_day_white">
<item name="android:textColor">#FFABAB</item>
</style>
【讨论】:
嘿,我已经用文本视图尝试过这个,但只有第一种样式有效,而不是扩展样式。有什么线索吗?【参考方案3】:Android下的样式可以有父样式。
所以只需将MyActivityTextView
定义为父样式GeneralTextView
,并更改/添加样式属性。
然后您可以使用MyActivityTextView
获取某些视图,使用GeneralTextView
获取其他视图。
在Defining Styles中有描述。
【讨论】:
哦,我明白了。太好了,非常感谢。还有一个问题:子样式也可以覆盖父属性吗? 是的,它可以覆盖父属性。以上是关于如何将两种不同的样式应用于android中的一个元素?的主要内容,如果未能解决你的问题,请参考以下文章