我正在尝试了解Android的主题和样式系统,基本上尝试做最简单的事情 - 更改TextView文本的默认颜色。
根据 TextView 的源代码,默认样式为:
<item name="textViewStyle">@style/Widget.TextView</item>
看看这种风格,我发现了以下内容:
<style name="Widget.TextView">
<item name="textAppearance">?attr/textAppearanceSmall</item>
....
</style>
似乎默认的文本外观设置为文本外观小(来自主题)。
我查看主题.xml对于引用的textAppearanceSmall
,发现:
<item name="textAppearanceSmall">@style/TextAppearance.Small</item>
啊哈 - 它引用了这个 TextAppearance.Small:
<style name="TextAppearance.Small">
<item name="textSize">14sp</item>
<item name="textColor">?textColorSecondary</item>
</style>
好的,我们正在到达某个地方 - 也许?默认情况下,TextView 使用颜色"textColorSecondary"。
第一个直接的问题:为什么它的引用如此奇怪?(问号,但不像"?attr/textColorSecondary")?
我回到主题.xml文件并发现这一点:
<item name="textColorSecondary">@color/secondary_text_dark</item>
在这一点上,我很确定我必须覆盖我的自定义应用程序主题中的textColorSecondary
,如下所示:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:textColorPrimary">#00CC00</item>
</style>
这当然行不通...问题是 - 为什么?
顺便说一句:我正在查看的所有文件(主题.xml和样式.xml)都驻留在我的Android SDK目录中:
C:AndroidSDKplatformsandroid-26dataresvalues
试试这个:
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<item name="android:textColor">@color/white</item>
</style>