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, тогда все текстовые изображения становятся стандартными по умолчанию, пока я не закрою конкретную дату или месяц или год.