文本外观在我的主题中不起作用

时间:2013-02-06 14:19:04

标签: android xml android-theme

我正在尝试在我的所有应用中添加一个样式,所以我创建了一个内部风格的主题:

<resources>
    <style name="MyTheme" parent="android:Theme.Holo.Light">
        <item name="android:textAppearance">@style/subtitle</item>
    </style>

    <style name="subtitle parent="@android:style/TextAppearance">
        <item name="android:textColor">@color/purple</item>
        <item name="android:textSize">40sp</item>
    </style>
</resources>

但是textAppearance不起作用它保持不变,但是当我在我的主题中添加textColor这样的内容时,它可以正常工作

4 个答案:

答案 0 :(得分:1)

我可以看到,你没有在xml中为主题声明颜色。请在<resources>中添加以下行并尝试。你的xml看起来像是:

<resources>
<style name="MyTheme" parent="android:Theme.Holo.Light">
    <item name="android:textAppearance">@style/subtitle</item>
</style>

 <color name="purple">code for your color</color>

<style name="subtitle parent="@android:style/TextAppearance">
    <item name="android:textColor">@color/purple</item>
    <item name="android:textSize">40sp</item>
</style>

我认为这样做。

答案 1 :(得分:1)

这是一个很老的问题,但答案可能会对某人有所帮助。 解决此问题的关键在于此处的“样式技术的优先顺序”: precedenceOrderOfDifferentStylingTechniquesImage

顶部是最高优先级,底部是最低优先级。

我们可以看到theme的优先级最低,在您的示例中,您的android:textAppearance属性被接受此属性的每个视图的default style覆盖,默认样式属性在每个接受此属性的特定视图的每个元素中定义,在这种情况下,android:Theme.Holo.Light为textView提供默认样式,为android:textViewStyle ...,按钮为android:buttonStyle(继承其{ {1}}(来自TextView),等等。

因此,如果您尝试将textAppearance属性应用于TextVew,则应在android:textAppearance中使用<item name="android:textViewStyle">@style/subtitle</item>而不是<item name="android:textAppearance">@style/subtitle</item>。不用说,这是将MyTheme设置为null,这样您当前的代码就可以与textViews android:textViewStyle

一起正常工作

这篇文章更深入地解释了此优先顺序:

https://medium.com/androiddevelopers/whats-your-text-s-appearance-f3a1729192d

答案 2 :(得分:0)

取决于您的目标API,您需要将自定义代码放在不同的/res/values-vxx/style.xml文件中。

答案 3 :(得分:0)

对于TextView,请尝试在主题内使用android:textAppearanceSmall