Android 更改分隔器颜色不';t与min.sdk21一起工作

Android 更改分隔器颜色不';t与min.sdk21一起工作,android,Android,我有一个android应用程序,我想在其中更改日期选择器的分隔符颜色 这在SDK 20之前都可以正常工作 SDK 21=>显示默认的蓝色分隔符 SDK 23=>显示灰色分隔符 SDK 15-20=>显示我的绿色分隔符(正确) 这是我的代码: // DatePicker Set Divider Color private void preparePicker() { try { Field datePickerFields[] = DP.getClass().getDecl

我有一个android应用程序,我想在其中更改日期选择器的分隔符颜色

这在SDK 20之前都可以正常工作

SDK 21=>显示默认的蓝色分隔符 SDK 23=>显示灰色分隔符

SDK 15-20=>显示我的绿色分隔符(正确)

这是我的代码:

// DatePicker Set Divider Color
private void preparePicker() {
    try {
        Field datePickerFields[] = DP.getClass().getDeclaredFields();
        for (Field field : datePickerFields) {
            if ("mSpinners".equals(field.getName())) {
                field.setAccessible(true);
                Object spinnersObj = field.get(DP);
                LinearLayout mSpinners = (LinearLayout) spinnersObj;
                NumberPicker monthPicker = (NumberPicker) mSpinners.getChildAt(0);
                NumberPicker dayPicker = (NumberPicker) mSpinners.getChildAt(1);
                NumberPicker yearPicker = (NumberPicker) mSpinners.getChildAt(2);
                setDividerColor(monthPicker);
                setDividerColor(dayPicker);
                setDividerColor(yearPicker);
                break;
            }
        }
    } catch (Exception ex) {
        Log.e("-->", "Unable to change date dialog");
    }
}

private void setDividerColor(NumberPicker picker) {
    Field[] numberPickerFields = NumberPicker.class.getDeclaredFields();
    for (Field field : numberPickerFields) {
        if (field.getName().equals("mSelectionDivider")) {
            field.setAccessible(true);
            try {
                field.set(picker, getResources().getDrawable(R.drawable.picker_divider));
            } catch (IllegalArgumentException e) {
                Log.e("-->", "Illegal Argument Exception");
                e.printStackTrace();
            } catch (Resources.NotFoundException e) {
                Log.e("-->", "Resources NotFound");
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                Log.e("-->", "Illegal Access Exception");
                e.printStackTrace();
            }

您正在使用反射,字段名可能已更改为其他内容,请检查所有Catch Block的打印堆栈我用log.e更新了代码-但我没有收到日志消息Sokay,在重新启动android studio后,我收到此日志:“无法更改日期对话框”-如果(“mSpinners.equals(field.getName()),我必须更改此行如果(“MODE_SPINNER”.equals(field.getName()))但结果相同,请同时包含ex.printStackTrace(),以获取preparePicker()捕获中的确切消息,您还可以尝试将自定义NumberPicker设置为自定义NumberPicker,以避免此攻击?这意味着什么?你正在使用反射,字段名可能已更改为其他内容,请检查所有捕获块的打印堆栈我用log.e更新了代码-但我没有收到日志消息Sokay,在重新启动android studio后,我收到此日志:“无法更改日期对话框”-如果(“mSpinners.equals”),我必须更改此行(field.getName())到if(“MODE_SPINNER.equals(field.getName()))但相同的结果请包括ex.printStackTrace()以获取preparePicker()捕获的确切消息,也可以尝试将自定义NumberPicker设置为自定义NumberPicker,以避免此攻击。这意味着什么?