更改TimePicker文字颜色

我一直在试图改变我的timepicker的textcolor。 但是我找不到父母的样式。 我已经尝试了两个

<style name="MyTimePicker" parent="@android:style/Widget.Holo.TimePicker"> <item name="android:textColor">@color/text</item> </style> 

 <style name="MyTimePicker" parent="@android:style/Widget.TimePicker"> <item name="android:textColor">@color/text</item> </style> 

minSdkVersion是15.我的targetSdkVersion是20.我已经重build和清理我的项目。
我想我已经经历过所有类似的问题,但他们都没有为我提供一个解决scheme。 唯一可行的答案是使用某种图书馆,但我不是那种解决scheme的忠实粉丝。 是父母的path与我正在使用的不同,因为我很确定我应该能够以某种方式访问​​它?

编辑
这是主题如何应用;

 <TimePicker style="@style/MyTimePicker" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/timePicker" android:layout_below="@+id/textView" android:layout_centerHorizontal="true" /> 

在一张纸条上,这是我收到的错误(忘记放在之前):

错误:检索项的父项时出错:找不到与给定名称'@android:style / Widget.Holo.TimePicker'匹配的资源。

编辑2我已经看到一些问题,试图解决这个问题:

  1. 我怎么能重写TimePicker来改变文字颜色 – 我认为这个问题接近答案,但我不完全确定我需要做什么? 我是否需要将Android TimePicker样式导入到我的项目中?
  2. https://stackoverflow.com/questions/24973586/set-textcolor-for-timepicker-in-customized-app-theme – 没有答案给出。
  3. 我如何更改我的timepicker和datepicker的textcolor? – 试了0票的答案,但没有奏效。
  4. 如何在Android中更改DatePicker和TimePicker对话框的默认颜色? – 再次以类似的方式找不到TimePicker。
  5. Android的 – 如何更改TimePicker中的textColor? – 再次,找不到实际的TimePicker父项。

这些可能是对我的问题最好的问题/答案,但他们都没有帮助我。 这将是很好的得到一个明确的答案。

Solutions Collecting From Web of "更改TimePicker文字颜色"

我将Paul Burke的答案和Simon的答案结合起来,成功编辑TimePicker的文本颜色。

这是如何完成的:

 TimePicker time_picker; //Instantiated in onCreate() Resources system; private void set_timepicker_text_colour(){ system = Resources.getSystem(); int hour_numberpicker_id = system.getIdentifier("hour", "id", "android"); int minute_numberpicker_id = system.getIdentifier("minute", "id", "android"); int ampm_numberpicker_id = system.getIdentifier("amPm", "id", "android"); NumberPicker hour_numberpicker = (NumberPicker) time_picker.findViewById(hour_numberpicker_id); NumberPicker minute_numberpicker = (NumberPicker) time_picker.findViewById(minute_numberpicker_id); NumberPicker ampm_numberpicker = (NumberPicker) time_picker.findViewById(ampm_numberpicker_id); set_numberpicker_text_colour(hour_numberpicker); set_numberpicker_text_colour(minute_numberpicker); set_numberpicker_text_colour(ampm_numberpicker); } private void set_numberpicker_text_colour(NumberPicker number_picker){ final int count = number_picker.getChildCount(); final int color = getResources().getColor(R.color.text); for(int i = 0; i < count; i++){ View child = number_picker.getChildAt(i); try{ Field wheelpaint_field = number_picker.getClass().getDeclaredField("mSelectorWheelPaint"); wheelpaint_field.setAccessible(true); ((Paint)wheelpaint_field.get(number_picker)).setColor(color); ((EditText)child).setTextColor(color); number_picker.invalidate(); } catch(NoSuchFieldException e){ Log.w("setNumberPickerTextColor", e); } catch(IllegalAccessException e){ Log.w("setNumberPickerTextColor", e); } catch(IllegalArgumentException e){ Log.w("setNumberPickerTextColor", e); } } } 

不知道为什么你需要为此进行JavareflectionAPI。 它是一个简单的造型问题。 您需要覆盖的属性是: textColorPrimary

 <style name="AppTheme" parent="@android:style/Theme.Holo.Light"> .... <item name="android:textColorPrimary">#ff0000</item> </style> 

如果您在Dialog使用TimePicker ,请覆盖对话框主题中的android:textColorPrimary

就是这样。

TimePicker实际上只是两个NumberPicker 。 看着Widget.NumberPicker风格和布局,你会发现它使用

 @style/TextAppearance.Large.Inverse.NumberPickerInputText 

不幸的是, TextAppearance.Large.Inverse.NumberPickerInputText不使用您可以在主题中设置的属性之一。 所以你有两个select:

  1. 复制必要的类以创build您自己的NumberPickerTimePicker版本。 (您可以从HoloEverywhere等库中提取某些内容 )

  2. 使用黑客。

如果你想走第二条路线,你可以这样做:

 private int mNumberPickerInputId = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Resources system = Resources.getSystem(); // This is the internal id of the EditText used in NumberPicker (hack) mNumberPickerInputId = system.getIdentifier("numberpicker_input", "id", "android"); // just used for full example, use your TimePicker TimePicker timePicker = new TimePicker(this); setContentView(timePicker); final int hourSpinnerId = system.getIdentifier("hour", "id", "android"); View hourSpinner = timePicker.findViewById(hourSpinnerId); if (hourSpinner != null) { setNumberPickerTextColor(hourSpinner, Color.BLUE); } final int minSpinnerId = system.getIdentifier("minute", "id", "android"); View minSpinner = timePicker.findViewById(minSpinnerId); if (minSpinner != null) { setNumberPickerTextColor(minSpinner, Color.BLUE); } final int amPmSpinnerId = system.getIdentifier("amPm", "id", "android"); View amPmSpinner = timePicker.findViewById(amPmSpinnerId); if (amPmSpinner != null) { setNumberPickerTextColor(amPmSpinner, Color.BLUE); } } private void setNumberPickerTextColor(View spinner, int color) { TextView input = (TextView) spinner.findViewById(mNumberPickerInputId); input.setTextColor(color); } 

编辑

经过进一步的调查,这个黑客真的不太好。 它不会允许您更改NumberPicker上方/下方值的颜色。 使用后,颜色也会重置。 看起来你唯一的select就是创build自己的副本(上面的选项#1)。