您的位置:首页 > 移动开发 > Android开发

Android 更改系统DataPicker分割线颜色和距离

2016-04-13 17:00 579 查看
先看下运行截图



代码很简单,利用反射找到对应的全局变量 修改即可

/**

*

* 设置时间选择器的分割线颜色

* @param datePicker

*/

private void setDatePickerDividerColor(DatePicker datePicker){

// Divider changing:

// 获取 mSpinners

LinearLayout llFirst= (LinearLayout) datePicker.getChildAt(0);

// 获取 NumberPicker

LinearLayout mSpinners= (LinearLayout) llFirst.getChildAt(0);

for (int i = 0; i < mSpinners.getChildCount(); i++) {

NumberPicker picker = (NumberPicker) mSpinners.getChildAt(i);

Field[] pickerFields = NumberPicker.class.getDeclaredFields();

for (Field pf : pickerFields) {

if (pf.getName().equals("mSelectionDivider")) {//颜色

pf.setAccessible(true);

try {

// pf.set(picker.getHeight(), 20);

pf.set(picker, new ColorDrawable(getResources().getColor(android.R.color.holo_red_dark)));

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (NotFoundException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

}

}

}

}

}

/**

*

* 设置时间选择器的分割线高度

* @param datePicker

*/

private void setDatePickerDividerHight(DatePicker datePicker){

// Divider changing:

// 获取 mSpinners

LinearLayout llFirst= (LinearLayout) datePicker.getChildAt(0);

// 获取 NumberPicker

LinearLayout mSpinners= (LinearLayout) llFirst.getChildAt(0);

for (int i = 0; i < mSpinners.getChildCount(); i++) {

NumberPicker picker = (NumberPicker) mSpinners.getChildAt(i);

Field[] pickerFields = NumberPicker.class.getDeclaredFields();

for (Field pf : pickerFields) {

if(pf.getName().equals("mSelectionDividersDistance")){

pf.setAccessible(true);

try {

// pf.set(picker.getHeight(), 20);

pf.set(picker,40);//按照需求在此处修改

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (NotFoundException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

}

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: