背景: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);
- }