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

Tsu*_*aze 3 xml android 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>
Run Code Online (Sandbox Code Playgroud)

textAppearance不起作用它保持不变,但是当我textColor在我的主题中放入类似的东西时,它起作用了

Car*_*hoa 7

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

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

正如我们所看到的theme具有最低优先级,在您的示例中,您的android:textAppearance属性被default style接受此属性的每个视图的覆盖,默认样式属性在每个接受此属性的特定视图中定义,在这种情况下android:Theme.Holo.Light提供textView as android:textViewStyle...的默认样式是android:buttonStyle(继承textAppearance自 TextView),依此类推。

因此,如果您尝试将该android:textAppearance属性应用于 TextVew,则应使用 <item name="android:textViewStyle">@style/subtitle</item>而不是<item name="android:textAppearance">@style/subtitle</item>inside MyTheme。远离这是设置android:textViewStyle为null,这样您当前的代码将与textViews一起正常工作<item name="android:textViewStyle">null</item>

这篇文章更深入地解释了这个优先级:

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