如何将两种不同的样式应用于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中的一个元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何将两种方法循环在一起?

我们可以将两种不同类型的 AWS EC2 实例与弹性 beantalk 负载均衡器一起使用吗

如何将样式仅应用于引导程序中的特定屏幕类型

如何将样式应用于 Android 应用程序的所有按钮

将星形样式应用于Android中的复选框

React Native:不同的样式应用于方向变化