Android HoneyComb DatePicker文本颜色

我正在寻找一种机会来调整android蜂窝应用程序中的dateselect器小部件的文本颜色。 我知道,在我的情况下,全球的文本颜色是白色的,但我需要一个黑色的文字颜色的dateselect器作为背景是浅灰色。

有人知道怎么修这个东西吗?

Solutions Collecting From Web of "Android HoneyComb DatePicker文本颜色"

完成了

它在应用程序styles.xml中的主题(基本上在所有EditText字段上设置样式)

我有/值-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:

  <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:如何改变编辑文本的样式?

如果你在这个文件中search“editText”,你会看到你可以在一个Activity中的所有edittext字段上设置样式!

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

你重写这个项目:

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

我find了这个解决scheme:debuggingDatePicker对象,我得到的对象jerarqy。 也许这不是一个优雅的解决scheme,但它的作品:

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

您好:)有一个EditText小部件在dateselect器小部件内的某处。 你只需要find它。 你可以通过使用一些创意编码来做到这一点,并开始使用getChildAt(index)和getChildCount()方法searchdatepicker小部件的子元素,然后遍历它。

你也可以做这样的事情,但我不确定它会在所有设备上工作,更好地通过dateselect器儿童循环:

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

这会将文本颜色更改为黑色,但要注意recursion,这可能需要一些时间。

另外,当使用dateselect器的文本可以回到白色,所以很烂!

仅供参考这里是DatePicker的来源: https : //github.com/android/platform_frameworks_base/blob/master/core/res/res/layout/date_picker.xml

EditTexts是NumberPickers

我有一个类似的问题,虽然我正在寻求改变文本大小,但这是一个小的细节。 我使用相同的过程分开查看层次结构,并更改字体大小。 但是,一旦一个月(或一天或一年)发生变化,字体就会变回原来的值。 非常适合观看,不适合编辑。 我采取了下一步,并添加了一个更改监听器。 现在,当数值发生变化时,它会popup回首选字体大小:

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

函数setTextColorBlack()只能使用一次。 如果我滚动dateselect器,那么所有textviews将成为默认的颜色,直到我select在特定的date或月份或年份字段。