利用反射来更改Android原生DatePicker文字与分割线颜色
来源:互联网 发布:盟军敢死队2 mac版 编辑:程序博客网 时间:2024/06/05 11:42
啥也不说了,上代码!
private void setDatePickerDividerAndTextColor(DatePicker datePicker) { LinearLayout llFirst = (LinearLayout) datePicker.getChildAt(0); 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("mSelectorWheelPaint")) { pf.setAccessible(true); Paint paint = new Paint(); paint.setTextSize(Utils.sp2px(20, getApplicationContext())); paint.setTextAlign(Align.CENTER); paint.setColor(getResources().getColor(R.color.white)); try { pf.set(picker, paint); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (NotFoundException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } break; } } for (Field pf : pickerFields) { if (pf.getName().equals("mSelectionDivider")) { pf.setAccessible(true); try { pf.set(picker, new ColorDrawable(this.getResources().getColor(R.color.white))); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (NotFoundException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } break; } } } }
原理很简单,首先是通过反射遍历DatePicker中的所有Field,
内部的两个For循环中第一个是更改文字颜色
更改文字的颜色是通过反射获取NumberPicker的Paint,利用自己定义的paint来为其赋值
同理也可以更改字号,
第二个For循环则是为了变更分割线的颜色,分割线是Drawable类型,所以对其直接修改
上面的这个方法还有一点遗漏,就是当前选中的字颜色并未更改,所以还需要以下这个方法
private void changeDataPickerTextColor() { try { Field f[] = mBirth.getClass().getDeclaredFields(); for (Field field : f) { if (field.getName().equals("mYearSpinner")) { field.setAccessible(true); Object yearPicker = new Object(); yearPicker = field.get(mBirth); View childpicker; childpicker = (View) findViewById(Resources.getSystem().getIdentifier("year", "id", "android")); EditText textview = (EditText) childpicker.findViewById(Resources.getSystem().getIdentifier("numberpicker_input", "id", "android")); // textview.setTextSize(26); // textview.setPadding(-3, 0, -3, 0); textview.setTextColor(getResources().getColor(R.color.white)); // System.out.println("ss1:"+field); } if (field.getName().equals("mDaySpinner")) { field.setAccessible(true); Object yearPicker = new Object(); yearPicker = field.get(mBirth); ((View) yearPicker).setVisibility(View.VISIBLE); ((View) yearPicker).setPadding(-2, 0, -2, 0); View childpicker; childpicker = (View) findViewById(Resources.getSystem().getIdentifier("month", "id", "android")); EditText textview = (EditText) childpicker.findViewById(Resources.getSystem().getIdentifier("numberpicker_input", "id", "android")); // textview.setTextSize(26); // textview.setPadding(-3, 0, -3, 0); textview.setTextColor(getResources().getColor(R.color.white)); } if (field.getName().equals("mMonthSpinner")) { field.setAccessible(true); Object yearPicker = new Object(); yearPicker = field.get(mBirth); // ((View) yearPicker).setVisibility(View.VISIBLE); // ((View) yearPicker).setPadding(-2, 0, -2, 0); // View childpicker; childpicker = (View) findViewById(Resources.getSystem().getIdentifier("day", "id", "android")); EditText textview = (EditText) childpicker.findViewById(Resources.getSystem().getIdentifier("numberpicker_input", "id", "android")); // textview.setTextSize(26); // textview.setPadding(-3, 0, -3, 0); textview.setTextColor(getResources().getColor(R.color.white)); } } } catch (SecurityException e) { Log.d("ERROR", e.getMessage()); } catch (IllegalArgumentException e) { Log.d("ERROR", e.getMessage()); } catch (IllegalAccessException e) { Log.d("ERROR", e.getMessage()); } catch (Exception e) { Log.d("ERROR", e.getMessage()); } }
第一篇文章,我自己都佩服我自己
*文章内如果有遗漏或问题欢迎指正,谢谢。
0 0
- 利用反射来更改Android原生DatePicker文字与分割线颜色
- Android DatePicker设置分割线颜色
- Android修改DatePicker字体颜色及分割线颜色
- Android DatePicker,NumPicker解析(分割线颜色及调整大小)
- 设置numberpicker、DatePicker中间分割线颜色
- android中更改spinner、AutoCompleteTextView分割线的颜色
- Android 更改系统DataPicker分割线颜色和距离
- swift3 去除空白行分割线 更改分割线颜色
- iOS 更改tabBar分割线颜色
- Android 原生NumberPicker控件修改分割线颜色及字体颜色大小
- 改变NumberPicker文字,分割线的颜色
- 重写datepicker实现修改分割线颜色和间隔
- android中巧妙更改spinner、AutoCompleteTextView分割线的颜色值(spinner AutoCompleteTextView divider color)
- android中巧妙更改spinner、AutoCompleteTextView分割线的颜色值(spinner AutoCompleteTextView divider color)
- iOS10的UIPickerView分割线颜色,文字颜色
- Android利用SpannableStringBuilder设置TextView中部分文字的颜色...
- UITableView分割线样式与颜色
- UITableView分割线式样 与 颜色设置
- 扑克洗牌
- 百度地图定位
- 删除重复元素,集合
- 堆栈与队列
- JSP的九大隐式对象
- 利用反射来更改Android原生DatePicker文字与分割线颜色
- ”非常危险“的Linux命令大全
- JAVA多线程详解
- 无服务器无域名代替方案
- 基于TI-RTOS的CC2650DK开发(5)---线程概览
- 动物乐园
- 异常的知识点总结
- 六大经典排序算法 java 选择排序、插入排序、冒泡排序、快速排序、堆排序、归并排序,六大经典排序算法,
- 大数据实战学习笔记 03