24_简单自定义NumberPicker

24_简单自定义NumberPicker_第1张图片
示意图

使用默认数字选择器 NumberPicker 步骤

在布局文件中添加 NumberPicker 控件


在代码中设置

numberPicker = (MyNumberPicker) findViewById(R.id.number_picker);
numberPicker.setMinValue(10); // 设置选择器的最小值
numberPicker.setMaxValue(20); // 设置选择器的最大值
numberPicker.setValue(12); // 设置选择器的当前值

自定义NumberPicker

有时候我们需要修改分割线或字体颜色等操作,那么我们就需要继承和重写 NumberPicker。

新建 MyNumberPicker 类

public class MyNumberPicker  extends NumberPicker{
    public MyNumberPicker(Context context) {
        super(context);
        setPickerDividerColor(this);
    }

    public MyNumberPicker(Context context, AttributeSet attrs) {
        super(context, attrs);
        setPickerDividerColor(this);
    }

    public MyNumberPicker(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        setPickerDividerColor(this);
    }

    @Override
    public void addView(View child) {
        super.addView(child);
        updateView(child);
    }

    @Override
    public void addView(View child, int index) {
        super.addView(child, index);
        updateView(child);
    }

    @Override
    public void addView(View child, int index, ViewGroup.LayoutParams params) {
        super.addView(child, index, params);
        updateView(child);
    }

    @Override
    public void addView(View child, 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(32);
        }
    }

    // 通过反射拿到 mSelectionDivider 属性,然后设置上颜色值。
    private void setPickerDividerColor(NumberPicker mNumberPicker) {
        Field[] pickerFields = NumberPicker.class.getDeclaredFields();
        for (Field pf : pickerFields) {
            if (pf.getName().equals("mSelectionDivider")) {
                pf.setAccessible(true);
                try{
                    pf.set(mNumberPicker,new ColorDrawable(Color.parseColor("#3F51B5")));
                }catch (IllegalAccessException e) {
                    e.printStackTrace();
                }catch (Resources.NotFoundException e) {
                    e.printStackTrace();
                }catch (IllegalArgumentException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

在布局文件中使用

 

在代码中的使用和系统默认的方式一样。

你可能感兴趣的:(24_简单自定义NumberPicker)