Theme对TextView字体颜色的分析

问题描述:在下面的DestParkActivity的主题下使用TextView默认情况下是白色的,当你在<TextView android:textColor=”#000000”/>的时候也不会将字体变成黑色.

针对以上问题,我查看了Theme的源码:首先看Theme.AppCompat.NoActionBar的源码如下:

Theme对TextView字体颜色的分析_第1张图片

针对以上问题,我查看了Theme的源码:首先看Theme.AppCompat.NoActionBar的源码如下:


发现这里的style没有parent属性,在这里我要说一下对于Theme的继承有两种情况:一种是parent,另一种便是.的形式继承;所以根据Theme.AppCompat.NoActionBar继承于Theme.AppCompat,如下:

Theme对TextView字体颜色的分析_第2张图片

在这里发现Theme.AppCompat是一个但标签,在点父级Base.Theme.AppCompat,如下:

Theme对TextView字体颜色的分析_第3张图片

和上面一样,里面并没有内容:在点父级Base.V7.Theme.AppCompat,如下:

Theme对TextView字体颜色的分析_第4张图片

在Base.V7.Theme.AppCompat主题下便出现了Item的形式,我们都知道设置TextView的字体颜色是android:textColor,经过查找发现这里并没有,于是在点击父级Platform.AppCompat如下:

Theme对TextView字体颜色的分析_第5张图片

在这里我们也没有看到android:textColoritem,但是意外的看到android:textAppearanceitem,点进去发现:

Theme对TextView字体颜色的分析_第6张图片

又是单标签,点击父级Base.TextAppearance.AppCompat,如下:

Theme对TextView字体颜色的分析_第7张图片

哈哈,终于找到了,原来是在Base.TextApearance.AppCompat主题里面。

 

经过这样的查找,你有没有发现android:textColoritem并不是在Theme.AppCompat.NoActionBar父级主题里面,而是在父级主题里面有一个<item name=”android:textAppearance”>@TextAppearance.AppCompat<item>是在TextAppearance.AppCompat父主题里面。

 

这也就解释了为什么不能在Theme.AppCompat.NoActionBar主题下TextView控件中用android:textColor,因为就没有android:textColoritem,而是通过设置android:textAppearance来进行更改



你可能感兴趣的:(android)