Я ищу возможность настроить цвет текста виджета «Выбор даты» в сотовом приложении для Android.Я знал, что виджет присущ глобальному цвету текста, который в моем случае белый, но мне нужен черный цвет текста для средства выбора даты, поскольку фон здесь светло-серый.
Кто-нибудь знает, как это исправить?
СДЕЛАНО ЭТОМ
Сделал это в Теме в приложении styles.xml (в основном, установил стиль для всех полей EditText)
У меня есть это в / values-v11 /, так что это влияет только на> HC
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="Theme.SelectDate" parent="@android:style/Theme.Holo.NoActionBar"> <item name="android:editTextStyle">@style/Widget.EditText.Black</item> </style> <style name="Widget.EditText.Black" parent="@android:style/Widget.EditText"> <item name="android:textColor">@color/black</item> </style> </resources>
Затем в моем AndroidManifest для действия, которое использует DatePicker:
<activity android:name=".ui.phone.SelectDateActivity" android:label="Date Selection" android:screenOrientation="portrait" android:theme="@style/Theme.SelectDate" />
Вот и все!
Моя тренировка :
Я пришел к такому выводу, проверив источник DatePicker:
https://github.com/android/platform_frameworks_base/blob/master/core/res/res/layout/date_picker.xml
Это показало, что DatePicker использовал NumberPicker
https://github.com/android/platform_frameworks_base/blob/master/core/res/res/layout/number_picker.xml https://github.com/android/platform_frameworks_base/blob/master/core/res/res/layout/number_picker_with_selector_wheel.xml
NumberPicker использует EditText
Таким образом, вы можете оформить EditText
android: как изменить стиль редактирования текста?
И если вы будете искать в этом файле «editText», вы увидите, что вы можете установить стиль для всех полей edittext в одной операции!
https://github.com/android/platform_frameworks_base/blob/master/core/res/res/values/themes.xml
Вы переопределите этот пункт:
<item name="editTextStyle">@android:style/Widget.EditText</item>
Я нашел это решение: отлаживая объект DatePicker, я получаю объект jerarqy.Возможно, это не элегантное решение, но оно работает:
private void setNumberPickerProperties(DatePicker dp) { LinearLayout l = (LinearLayout)dp.getChildAt(0); if(l!=null) { l = (LinearLayout)l.getChildAt(0); if(l!=null) { for(int i=0;i<3;i++) { NumberPicker np = (NumberPicker)l.getChildAt(i); if(np!=null) { EditText et = (EditText)np.getChildAt(1); et.setTextColor(Color.BLACK); } } } } }
Привет! :) Где-то внутри виджета DatePicker есть виджет EditText. Вы просто должны найти это. Вы можете сделать это с помощью некоторого творческого кодирования и начать поиск по дочерним элементам виджета datepicker, используя такие методы, как getChildAt (index) и getChildCount (), а затем выполнить цикл по нему.
Вы также можете сделать что-то вроде этого, но я не уверен, что это будет работать на всех устройствах, лучше циклически проходить через детей datepickers:
DatePicker picker; ViewGroup childpicker; childpicker = (ViewGroup) findViewById(Resources.getSystem().getIdentifier("month" /*rest is: day, year*/, "id", "android")); EditText textview = (EditText) picker.findViewById(Resources.getSystem().getIdentifier("timepicker_input", "id", "android")); textview.setTextColor(Color.GREEN);
Надеюсь, это поможет :)
Хм, я сделал это так:
private void hackDatePickerTextColorToBlack(){ setTextColorBlack(datePicker); } private static void setTextColorBlack(ViewGroup v) { int count = v.getChildCount(); for (int i = 0; i < count; i++) { View c = v.getChildAt(i); if(c instanceof ViewGroup){ setTextColorBlack((ViewGroup) c); } else if(c instanceof TextView){ ((TextView) c).setTextColor(Color.BLACK); } } }
Это меняет цвет текста на черный, но осторожно с рекурсией, это может занять некоторое время.текст возвращается к белому, так что это отстой!
К вашему сведению, вот источник DatePicker: https://github.com/android/platform_frameworks_base/blob/master/core/res/res/layout/date_picker.xml
EditTexts - NumberPickers
Функция setTextColorBlack() работает только один раз. Если я прокручиваю указатель даты, то все текстовые представления становятся цветом по умолчанию, пока я не укажу на поле определенной даты, месяца или года.
setTextColorBlack()
У меня была похожая проблема, хотя я хотел изменить размер текста, но это мелочь.Я использовал тот же процесс, чтобы отделить иерархию View и изменить размер шрифта.Однако один раз в месяц (или день или год) меняли шрифт обратно на исходное значение.Отлично подходит для просмотра, плохо для редактирования.Я сделал следующий шаг и добавил слушателя изменений.Теперь, когда значение изменяется, оно возвращается к предпочтительному размеру шрифта:
public void setFontSize(final int size) { LinearLayout l = (LinearLayout) mPicker.getChildAt(0); if (l != null) { l = (LinearLayout) l.getChildAt(0); if (l != null) { for (int i = 0; i < 3; i++) { NumberPicker np = (NumberPicker) l.getChildAt(i); for (int x = 0; x < np.getChildCount(); x++) { View view = np.getChildAt(x); if ((view != null) && (view instanceof TextView)) { final TextView tv = (TextView) view; tv.setTextSize(size); tv.setOnEditorActionListener(new OnEditorActionListener() { public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { tv.setTextSize(size); return false; } }); } } } } } }