Android HoneyComb DatePicker Text Color Android HoneyComb DatePicker Text Color android android

Android HoneyComb DatePicker Text Color


DONE IT

Did it in a Theme in the application styles.xml (basically set a style on all EditText fields)

I have this in /values-v11/ so it only affects >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>

Then in my AndroidManifest, for the Activity that uses the DatePicker:

      <activity            android:name=".ui.phone.SelectDateActivity"            android:label="Date Selection"            android:screenOrientation="portrait"            android:theme="@style/Theme.SelectDate" />

That's it!


My Working Out:

I came to this conclusion by checking the DatePicker source:

https://github.com/android/platform_frameworks_base/blob/master/core/res/res/layout/date_picker.xml

That showed me the DatePicker used NumberPicker

https://github.com/android/platform_frameworks_base/blob/master/core/res/res/layout/number_picker.xmlhttps://github.com/android/platform_frameworks_base/blob/master/core/res/res/layout/number_picker_with_selector_wheel.xml

The NumberPicker uses an EditText

You can therefore style an EditText

android : how to change the style of edit text?

And if you search in this file for "editText" you will see you can set a style on all edittext fields in one Activity!

https://github.com/android/platform_frameworks_base/blob/master/core/res/res/values/themes.xml

You override this item:

 <item name="editTextStyle">@android:style/Widget.EditText</item>


I have found this solution: debugging DatePicker object, I get the object jerarqy. Maybe it's not an elegant solution but it works:

    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);                                }                        }                }        }}


Hi there :) There is an EditText widget somewhere within the datepicker widget. You just have to find it. You can do this by using some creative coding and start searching through the childrens of the datepicker widget using methods like getChildAt(index) and getChildCount() and then loop through it.

You can also do something like this, but i'm not sure that it will work on all devices, better loop through the datepickers children:

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);

I hope this helps :)