不知道为什么您需要为此深入研究 Java 反射 API。这是一个简单的造型问题。您需要覆盖的属性是:textColorPrimary。
<style name="AppTheme" parent="@android:style/Theme.Holo.Light">
....
<item name="android:textColorPrimary">#ff0000</item>
</style>
如果您在Dialog 中使用TimePicker,请覆盖对话框主题中的android:textColorPrimary。
就是这样。
其他信息:
这是Yoann Hercouet 的有见地的评论:
这个解决方案不仅仅改变 NumberPicker 上的颜色,它
是一个全球性的变化,会影响很多组件
这是正确的,但它忽略了我暗示的可能性。此外,global 意味着应用程序范围内的影响。通过将此主题仅应用于包含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) {
// wrap the current context in the style we defined before
super(new ContextThemeWrapper(context, R.style.NumberPickerTextColorStyle), attrs);
}
}
最后,在你的布局中使用ThemedNumberPicker:
<package.name.ThemedNumberPicker
android:id="@+id/numberPicker"
....
....
.... />
我们已经成功地控制了textColorPrimary=INTENDED_COLOR 对我们应用的影响。
这当然只是一种选择。例如,如果您要对包含 NumberPicker 的布局进行膨胀,则可以使用:
// In this case, the layout contains <NumberPicker... />, not <ThemedNumberPicker... />
LayoutInflater.from(new ContextThemeWrapper(context, R.style.NumberPickerTextColorStyle))
.inflate(R.layout.number_picker_layout, ...);