Intereting Posts
У моего FloatingActionButton есть некоторые странные линии, выходящие из него на 4.4 и ниже Реферат: сделайте снимок с использованием намерения камеры и отобразите фотографию с правильной ориентацией (работает, надеюсь, на все устройства) Как разделенная строка в java Программно временно отключить автоматическое обновление Как показать изображение в теле письма? Получение результатов соседних мест с местоположения пользователя с помощью API Google Карт на Android Внедрение таймера обратного отсчета с использованием услуги в фоновом режиме Andengine: разделите между OnAreaTouched и OnSceneTouched Как установить adSize? Android: Удаление события события удаляет все его появление Переход 3D-куба в Android Вызов диалогового окна Android, не затухающий фон Убедитесь, что Android WebView потребляет события касания Как инициализировать Crashlytics в Fabric.io? Как получить строку Android Path в файл в папке «Активы»?

Изменение цвета текста TimePicker

Я пытаюсь изменить цвет текста моего timepicker. Но я не могу найти, где находится родительский стиль. Я пробовал оба

<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. Я восстановил и очистил свой проект.
Я думаю, что я прошел через каждый аналогичный вопрос о SO, и никто из них действительно не предоставил мне решение. Единственный ответ, который может сработать, – это использовать какую-то библиотеку, но я не большой поклонник этого решения. Является ли путь к родительскому объекту чем-то отличным от того, что я использую, потому что я уверен, что смогу каким-то образом получить к нему доступ?

редактировать
Так применяется тема;

 <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? – Пробовал ответ 0 голосов, но он не сработал.
  4. Как изменить цвет по умолчанию диалогового окна DatePicker и TimePicker в Android? – Снова не удается найти TimePicker аналогичным образом.
  5. Android – Как изменить textColor в TimePicker? – Опять же, не удается найти фактического родителя TimePicker.

Вероятно, это лучшие вопросы / ответы на мою проблему, но никто из них не помогает мне. Было бы неплохо получить окончательный ответ на это.

Solutions Collecting From Web of "Изменение цвета текста TimePicker"

Я объединил ответ Пола Берка и ответ Саймона, чтобы успешно отредактировать цвет текста 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); } } } 

TimePicker на самом деле просто два NumberPicker . Widget.NumberPicker стиль и макет Widget.NumberPicker , вы обнаружите, что он использует

 @style/TextAppearance.Large.Inverse.NumberPickerInputText 

К сожалению, TextAppearance.Large.Inverse.NumberPickerInputText не использует один из атрибутов, которые вы можете установить в своей теме. Таким образом, у вас есть два варианта:

  1. Скопируйте необходимые классы, чтобы создать собственную версию NumberPicker и TimePicker . (Вы могли бы извлечь что-то из таких библиотек, как 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 выше / ниже. Цвет также сбрасывается после взаимодействия с ним. Кажется, что единственным вариантом будет создание собственных копий необходимых классов (вариант № 1 выше).

Не уверен, почему вам нужно будет погрузиться в API Java Reflection для этого. Это простой стиль. Атрибут, который вам нужно переопределить: textColorPrimary .

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

Если вы используете TimePicker внутри Dialog TimePicker , переопределите android:textColorPrimary в теме диалога.

Вот и все.