Android 修改 TextView 的全局默認顏色。


如果你的應用中大多數TextView的顏色是紅色, 或者其他顏色, 你是為每一個TextView都設置一次顏色, 還是有其他更好的辦法, 這里教你怎么修改TextView的默認顏色。

當然我們TextView的遠嗎入手。

通過查看 TextView 源碼, 發現如下代碼:
public TextView(Context context, AttributeSet attrs) {
    this(context, attrs, com.android.internal.R.attr.textViewStyle);
}

這段代碼表示, TextView的默認樣式名稱是  textViewStyle。 然后在Themes.xml中的Theme下面找到  textViewStyle, 可以發現如下代碼
<item name="textViewStyle">@android:style/Widget.TextView</item>
而且不同的主題TextViewStyle的值是不一樣的。其中:
  • Theme 下面是 @android:style/Widget.TextView;
  • Theme.Height 下面沒有這個值, 不知道為什么;
  • Theme.Holo 下面是 :@android:style/Widget.Holo.TextView;
  • Theme.Holo.Light 下面是 @android:style/Widget.Holo.Light.TextView;
 
接着查看源碼TextView, 在509行發現如下代碼:
case com.android.internal.R.styleable.TextAppearance_textColor:
                    textColor = appearance.getColorStateList(attr);
                    break;
這段代碼的功能就是用於獲取顏色的。 可以發現是通過com.android.internal.R.styleable.TextAppearance_textColor的值。 然后我們查看style.xml文件, 找到如下代碼:
    <style name="Widget.TextView">
        <item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
        ...
    </style>
Widget.TextView 就是上文找的 Theme下面的TextViewStyle的值。 然后我們看到 android:textAppearance 這個就是TextView源碼中提到過的。 自然接下來查看:?android:attr/textAppearanceSmall 在Theme中定義的值的是什么。
<item name="textAppearanceSmall">@android:style/TextAppearance.Small</item>
我們看到textAppearanceSmall值是 @android:style/TextAppearance.Small, 然后當然要找到@android:style/TextAppearance.Small
在style.xml中找到:
    <style name="TextAppearance.Small">
        <item name="android:textSize">14sp</item>
        <item name="android:textColor">?textColorSecondary</item>
    </style>
 
可以看到顏色的定義名稱是 ?textColorSecondary, 到這里我們終於找到定義顏色的地方了。 這個各個主題鮮明都有定義,不止一處。
<item name="textColorSecondary">@android:color/secondary_text_dark</item>
 
在Theme中我們終於看到定義TextView的顏色的代碼了。 比如把TextView默認顏色改為 #333333, 使用如下代碼
    <style name="AppTheme" parent="Theme">
        <item name="android:textColorSecondary">#333333</item>
    </style>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM