Android 更改分隔器颜色不';t与min.sdk21一起工作
我有一个android应用程序,我想在其中更改日期选择器的分隔符颜色 这在SDK 20之前都可以正常工作 SDK 21=>显示默认的蓝色分隔符 SDK 23=>显示灰色分隔符 SDK 15-20=>显示我的绿色分隔符(正确) 这是我的代码: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
// 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,以避免此攻击。这意味着什么?