如何在Android中为一个元素应用两种不同的样式?

17

我有一个TextView,我想应用一种样式,这种样式我用于所有TextView元素,另外还想使用另一种样式,只在特定的Activity中使用。有没有可能做到这一点?

4个回答

23

这是一些可能有助于整体问题的小信息 - 无耻地从http://developer.android.com/guide/topics/ui/themes.html#DefiningStyles复制而来。

如果你想要继承自己定义的样式,就不必使用parent属性。 相反,只需将您想要继承的样式名称与新样式名称以句点分隔前缀相连即可。例如,要创建一个新样式,继承上面定义的CodeFont样式,但将颜色设置为红色,可以像这样编写新样式:

  <style name="CodeFont.Red">
        <item name="android:textColor">#FF0000</item>
    </style>
注意,<style>标签中没有parent属性,但由于name属性以你创建的CodeFont样式名称开头,因此该样式将继承该样式的所有样式属性。然后,该样式将覆盖android:textColor属性以使文本呈现红色。您可以通过@style/CodeFont.Red引用这种新样式。
您可以通过使用句点链接名称来无限制地继承样式。例如,您可以通过以下方式扩展CodeFont.Red的大小:
<style name="CodeFont.Red.Big">
    <item name="android:textSize">30sp</item>
</style>

4
我发现有趣的是,尽管我之前访问过并浏览了那个页面,但我不知道这个非常有用而且有趣的小贴士。谢谢@Bruiser。 - DavidDraughn

14

在安卓中,样式可以有父样式。

所以只需要将MyActivityTextView定义为GeneralTextView的父样式,并更改/添加样式属性。

然后您可以将MyActivityTextView用于某些视图,将GeneralTextView用于其他视图。

这在定义样式中有描述。


哦,我明白了。太好了,非常感谢。不过还有一个问题:子样式也可以覆盖父级属性吗? - Bruiser
2
是的,它可以覆盖父级属性。 - Peter Knego

4
您可以在style.xml中使用一个样式来扩展另一个样式:
<style name="current_weekday_white" parent="current_day_white">
    <item name="android:textColor">#FFABAB</item>
</style>

嗨,我已经尝试使用TextView,但只有第一个样式有效,扩展的样式无效。有什么线索吗? - JRE.exe

0

从另一个样式继承一个样式,并从第三个样式复制元素。

<style name="Button.Style1" parent="android:style/Widget.Button">
    <item name="android:gravity">center</item>
    <item name="android:textSize">12sp</item>
    <item name="android:background">@drawable/shape_button</item>

    <!-- Here are attributes from third style -->
    <item name="android:fontFamily">sans-serif-medium</item>
    <item name="android:textColor">#112233</item>
</style>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接