Android 原生NumberPicker控件修改分割线颜色及字体颜色大小
2017-09-04 22:16
2341 查看
因Android自带的NumberPicker不支持直接设置分割线的颜色和字体颜色,所以:
1、NumberPicker字体颜色:
public class QNumberPicker extends NumberPicker { public QNumberPicker(Context context) { super(context); } public QNumberPicker(Context context, AttributeSet attrs) { super(context, attrs); } public QNumberPicker(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public void addView(View child) { super.addView(child); updateView(child); } @Override public void addView(View child, int index, android.view.ViewGroup.LayoutParams params) { super.addView(child, index, params); updateView(child); } @Override public void addView(View child, android.view.ViewGroup.LayoutParams params) { super.addView(child, params); updateView(child); } public void updateView(View view) { if (view instanceof EditText) { //这里修改字体的属性 ((EditText) view).setTextColor(Color.parseColor("#BAA785")); // ((EditText) view).setTextSize(); } } }
继承和重写NumberPicker,在xml中使用修改过的NumberPicker
<com.xx.xx.test.QNumberPicker android:layout_width="90dp" android:layout_height="wrap_content"/>
2、NumberPicker分割线颜色
private void setNumberPickerDividerColor(NumberPicker numberPicker) { NumberPicker picker = numberPicker; Field[] pickerFields = NumberPicker.class.getDeclaredFields(); for (Field pf : pickerFields) { if (pf.getName().equals("mSelectionDivider")) { pf.setAccessible(true); try { //设置分割线的颜色值 pf.set(picker, new ColorDrawable(this.getResources().getColor(R.color.green))); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (Resources.NotFoundException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } break; } } }
这个方法是通过反射拿到mSelectionDivider属性,然后给他设置上颜色值。(此方法在NumberPicker 的 setDisplayedValues后调用)
补充: DatePicker的分割线颜色
DatePicker和NumberPicker设置分割线颜色差不多,只是需要先拿到外面的LinearLayout
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, new ColorDrawable(this.getResources().getColor(R.color.green))); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (NotFoundException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } break; } } } }
用以下代码关掉编辑模式,不然Picker上会有光标和软键盘弹出来
mProvince.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);
相关文章推荐
- Android NumberPicker控件修改分割线颜色及字体颜色大小
- Android原生AlertDialog修改标题,内容,按钮颜色,字体大小等
- 【android开发】 修改控件Spinner内容的字体大小 颜色等属性
- Android原生AlertDialog修改标题,内容,按钮颜色,字体大小等
- Android原生AlertDialog修改标题,内容,按钮颜色,字体大小等
- Android 修改原生NumberPicker数字选择器的分隔线颜色、文字颜色和大小,同时利用PopupWindow和补间动画自定义弹出效果
- 【android开发】 修改控件Spinner内容的字体大小 颜色等属性
- android NumberPicker如何修改中间选中的Edittext大小、颜色和内容
- Android学习之数字选择器NumberPicker之修改字色字号分割线颜色
- 修改控件Spinner内容的字体大小 颜色等属性
- Android资源之String (三): html标签,语法(原生支持) 设置字体大小/颜色/下划线等
- Android修改DatePicker字体颜色及分割线颜色
- 修改控件Spinner内容的字体大小 颜色等属性
- Android ui 字体 控件大小 颜色
- Android修改DatePicker字体颜色及分割线颜色详细介绍
- android中修改tablayout中的字体大小和颜色
- Android Tablayout + viewpager 切换时修改tablayout title(标题)的字体颜色和字体大小
- iOS开发-UI控件:修改textField的placeholder的字体颜色、大小
- Android 修改TextView中部分字体的颜色及大小
- Android 单独控件实现不同字体大小、不同颜色