您的位置:首页 > 移动开发 > Android开发

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
相关文章推荐