3

我正在将此代码用于日期选择器..我想设置所选日期的颜色不同。并更改日期选择器中文本的默认颜色。我该如何执行它。我正在使用 android2.2 。

  <LinearLayout
    android:id="@+id/datePickerLayout"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.45"
    android:background="#2B2B2B" >

    <DatePicker
        android:id="@+id/datePicker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="27dp"
        android:layout_marginTop="30dp"
        android:maxDate="@string/maxDate"
        android:minDate="@string/minDate" >
    </DatePicker>
</LinearLayout>
4

2 回答 2

0

为了访问 DatePicker 的内部,您必须包含该类的自定义版本。如果您查看源代码,您会注意到 3 个 EditTexts,它们都是私有的,没有公共 getter……好消息是该类相当简单,因此修改它应该很容易。

http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/android/widget/DatePicker.java#95

于 2013-03-18T07:26:34.517 回答
0

这个想法是循环 DatePicker 的孩子以获得 NumberPickers。获得 NumberPicker 后,获取 Paint 类型的私有字段 mSelectorWheelPaint(用于绘制 DatePicker),并设置它的颜色。

只需使用下一个代码并调用updateAttrs(yourDatePicker, color)

void updateAttrs(ViewGroup p, int color) {
    for (int i = 0; i < p.getChildCount(); ++i) {
        View v = p.getChildAt(i);
        if (v instanceof NumberPicker)
           setNumberPickerColor((NumberPicker)v, color);
        else if (v instanceof ViewGroup)
            updateAttrs((ViewGroup)v, color);
    }
}

void setNumberPickerColor(NumberPicker p, int color) {
    try {
        Field selectorWheelPaintField = NumberPicker.class.getDeclaredField("mSelectorWheelPaint");
        if (selectorWheelPaintField != null) {
            selectorWheelPaintField.setAccessible(true);
            ((Paint) selectorWheelPaintField.get(p)).setColor(color);
        }
    }
    catch (Exception e) {
        Log.e("YourTag", e.getMessage(), e);
    }

    for (int i = 0; i < p.getChildCount(); ++i) {
        View v = p.getChildAt(i);
        if (v instanceof EditText)
            ((EditText) v).setTextColor(color);
    }

    p.invalidate();
}

可能您需要系统版本 >= 21 (Lollipop),但我没有尝试。

于 2018-11-02T22:54:54.210 回答