我不确定为什么你需要深入了解Java Reflection API。这只是一个简单的样式问题。你需要覆盖的属性是:textColorPrimary
。
<style name="AppTheme" parent="@android:style/Theme.Holo.Light">
....
<item name="android:textColorPrimary">
</style>
如果您在
Dialog
中使用
TimePicker
,请在对话框的主题中覆盖
android:textColorPrimary
。
就是这样。
其他信息:
下面是
Yoann Hercouet评论的见解:
这个解决方案不仅会改变 NumberPicker 上的颜色,它是对 A LOT 组件的全局更改
这是正确的,但它忽略了我所暗示的可能性。此外,“全局”意味着影响整个应用。可以通过仅将此主题应用于包含
NumberPicker
的活动来将其限制为活动范围。但是,我同意,这仍然可能过于“腐蚀性”。
这里的想法是以某种方式将
textColorPrimary = INTENDED_COLOR
注入到
NumberPicker
将看到的主题中。有多种方法可以实现这一点。以下是其中一种方法:
在
res/values/styles.xml
中定义一个基础风格:
<style name="NumberPickerTextColorStyle">
<item name="android:textColorPrimary">@color/intended_color</item>
</style>
现在,创建一个自定义的 NumberPicker
:
public class ThemedNumberPicker extends NumberPicker {
public ThemedNumberPicker(Context context) {
this(context, null);
}
public ThemedNumberPicker(Context context, AttributeSet attrs) {
super(new ContextThemeWrapper(context, R.style.NumberPickerTextColorStyle), attrs);
}
}
最后,在您的布局中使用 ThemedNumberPicker
:
<package.name.ThemedNumberPicker
android:id="@+id/numberPicker"
....
....
.... />
我们已成功控制textColorPrimary=INTENDED_COLOR
对我们应用程序的影响。
当然,这只是其中一种选择。例如,如果您正在填充一个包含NumberPicker
的布局,则可以使用:
LayoutInflater.from(new ContextThemeWrapper(context, R.style.NumberPickerTextColorStyle))
.inflate(R.layout.number_picker_layout, ...);
values\themes.xml
中(包括白天和黑夜的可选主题)。 - Malte Ge