【问题标题】:How to apply two different styles to one element in android?如何将两种不同的样式应用于android中的一个元素?
【发布时间】:2011-06-18 13:56:40
【问题描述】:

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

【问题讨论】:

    标签: android xml android-layout inheritance styles


    【解决方案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中有描述。

    【讨论】:

    • 哦,我明白了。太好了,非常感谢。还有一个问题:子样式也可以覆盖父属性吗?
    • 是的,它可以覆盖父属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多