Android HoneyComb DatePicker Цвет текста
Я ищу возможность настроить цвет текста виджета datepicker в приложении сотовых телефонов Android. Я знал, что виджет присущ глобальному текстовому цвету, который является белым в моем случае, но мне нужен черный цвет текста для datepicker, поскольку фон здесь светло-серый.
Кто-нибудь знает, как это исправить?
Ответы
Ответ 1
СОВЕРШЕННО
Сделал ли он тему в приложении styles.xml(в основном задает стиль во всех полях EditText)
У меня это в /values -v11/, поэтому оно влияет только нa > 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 для Activity, использующего 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>
Ответ 2
Я нашел это решение: отлаживая объект 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);
}
}
}
}
}
Ответ 3
Привет!:) В виджетах 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);
Надеюсь, это поможет:)
Ответ 4
Хм я сделал это так:
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);
}
}
}
Это изменяет цвет текста на черный, но с рекурсией это может занять некоторое время.
Также при использовании выбора даты текст возвращается к белому, чтобы отстой!
FYI здесь источник для DatePicker: https://github.com/android/platform_frameworks_base/blob/master/core/res/res/layout/date_picker.xml
EditTexts являются NumberPickers
Ответ 5
У меня была аналогичная проблема, хотя я искал изменить размер текста, но это мелочь. Я использовал тот же процесс, чтобы выделить иерархию 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;
}
});
}
}
}
}
}
}
Ответ 6
Функция setTextColorBlack()
работает только один раз. Если я прокрутку datepicker, тогда все текстовые изображения становятся стандартными по умолчанию, пока я не закрою конкретную дату или месяц или год.