概述
今天讲下NumberPicker,其实NumberPicker是个很不完善的控件,许多我们认为谷歌肯定会提供的属性居然都没有,比如居然没有修改字体大小和字体颜色的属性,更别提修改分割线颜色了,关键系统提供的NumberPicker确实有点丑,所以大家都会想办法去修改NumverPicker,要么去自定义,要么去想办法修改那些不能修改的属性。今天就讲下如何修改NumberPicker的字色、字号和分割线颜色,还有如何禁止NumberPicker无限滚动,如何在NumberPicker中显示文本而非数字等。
通过自定义NumberPicker的方式可以修改字色和字号,话不多说,看代码:
/**
* 改变文本样式的NumberPicker
*
* @author yuzhentao
*/
public class ChangeTextStyleNumberPicker extends NumberPicker {
public ChangeTextStyleNumberPicker(Context context) {
super(context);
}
public ChangeTextStyleNumberPicker(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ChangeTextStyleNumberPicker(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, ViewGroup.LayoutParams params) {
super.addView(child, params);
updateView(child);
}
@Override
public void addView(View child, int index, ViewGroup.LayoutParams params) {
super.addView(child, index, params);
updateView(child);
}
private void updateView(View view) {
if (view instanceof EditText) {
((EditText) view).setTextColor(getResources().getColor(R.color.tc_change_text_style_number_picker));
((EditText) view).setTextSize(16);
}
}
}
所以,这样就能修改了,相信大家都看得懂。
还有一种方式也可以修改字色,方法就是通过Java的反射机制来得到修改字色的属性即可:
/**
* 设置NumberPicker字色
*
* @param numberPicker:NumberPicker
* @param color:int
* @return boolean
*/
public static boolean setNumberPickerTextColor(NumberPicker numberPicker, int color) {
final int count = numberPicker.getChildCount();
for (int i = 0; i < count; i++) {
View child = numberPicker.getChildAt(i);
if (child instanceof EditText) {
Field selectorWheelPaintField;
try {
selectorWheelPaintField = numberPicker.getClass().getDeclaredField("mSelectorWheelPaint");
selectorWheelPaintField.setAccessible(true);
try {
((Paint) selectorWheelPaintField.get(numberPicker)).setColor(color);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
((EditText) child).setTextColor(color);
numberPicker.invalidate();
return true;
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
}
return false;
}
至于反射怎么用网上有很多种方法,这里不细述,那么如何修改分割线的颜色呢?同样我们可以通过反射来完成:
/**
* 设置NumberPicker分割线颜色
*
* @param numberPicker:NumberPicker
* @param color:int
*/
public static void setNumberPickerDividerColor(NumberPicker numberPicker, int color) {
Field[] pickerFields = NumberPicker.class.getDeclaredFields();
for (Field SelectionDividerField : pickerFields) {
if (SelectionDividerField.getName().equals("mSelectionDivider")) {
SelectionDividerField.setAccessible(true);
try {
SelectionDividerField.set(numberPicker, new ColorDrawable(color));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
break;
}
}
}
好,那么如何防止NumberPicker无限滚动呢?这个就很简单啦,一行代码搞定:
npQuery.setWrapSelectorWheel(false);
最后,如何在NumberPicker中显示文本而非数字呢?也是很简单:
npQuery.setDisplayedValues(string);
npQuery.setMinValue(0);
npQuery.setMaxValue(string.length - 1);
记住,setWrapSelectorWheel()必须用在上面的代码之下。
实际效果图木有。
最后
以上就是愤怒树叶为你收集整理的Android学习之数字选择器NumberPicker之修改字色字号分割线颜色的全部内容,希望文章能够帮你解决Android学习之数字选择器NumberPicker之修改字色字号分割线颜色所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复