如果你的應用中大多數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>