背景:DatePicker中的字体大了,或想隐藏月份,或想把月份这部分拉宽点(比如有的手机中月份中带个'月'字,导致月份显示不全).
实现:通过反射去修改DatePicker或NumberPicker中的属性的值
效果图:
关键代码:
Field[] fields = DatePicker.class.getDeclaredFields();
//获取DatePicker中的属性
for(Field field : fields) {
field.setAccessible(true);
if(field.getType().getSimpleName().equals("NumberPicker")) {
try {
v_month2 = (View)field.get(datePicker2);
v_month3 = (View)field.get(datePicker3);
v_month4 = (View)field.get(datePicker4);
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
}
}
//获取NumberPicker中的属性
if(v_month3 != null) {
fields = v_month3.getClass().getDeclaredFields();
for(Field field : fields) {
field.setAccessible(true);
if(field.getType().getName().equals(EditText.class.getName())) {
try {
v_edit3 = (EditText) field.get(v_month3);
}catch (Exception e) {
Log.e(TAG, e.getMessage());
}
}
}
}
//改变Month的宽度
if(v_month2 != null) {
v_month2.measure(0, 0);
v_month2.getLayoutParams().width = (int) (v_month2.getMeasuredWidth() * 1.6f);
}
//将其隐藏
if(v_month4 != null) {
v_month4.setVisibility(View.GONE);
}
//改变Month的字体大小
if(v_edit3 != null) {
v_edit3.setTextSize(12);
}