美文网首页Android开发经验谈Android开发程序员
Android NumberPicker的基本用法及常见问题汇总

Android NumberPicker的基本用法及常见问题汇总

作者: 实例波 | 来源:发表于2017-09-16 21:06 被阅读4140次

    前言

    在项目中需要一个选择人数的控件,于是想到了NumberPicker,这个控件相对不是那么热门,我也是第一次用,所以遇到了一些问题,这里做个小结。

    正文

    首先来看一下最终的效果:


    NumberPicker.png

    需求其实很简单,就是弹个Dialog,然后选数字,点确定。Dialog和这几个Button我就不多说了,主要来讲讲怎么使用NumberPicker,主要包含以下几点:

    • 设置内容
    • 设置循环状态
    • 设置不可编辑
    • 设置监听
    • 设置分割线颜色
    • 设置字体颜色和大小

    首先设置内容这块,如果只设置了最大最小值,那么只显示数字,如果想要显示字符串,需要自己定义一个数组,以上面的效果为例,由于显示内容中有一个“10+”,所以我们不能只单纯显示数字,得自己定义一个数组:

        private String[] numbers = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "10+"};
        //设置需要显示的内容数组
        numberPicker.setDisplayedValues(numbers);
        //设置最大最小值
        numberPicker.setMinValue(1);
        numberPicker.setMaxValue(numbers.length);
        //设置默认的位置
        numberPicker.setValue(1);
    

    设置是否循环显示,注意setWrapSelectorWheel方法须在上面的代码之后调用才会生效:

        //这里设置为不循环显示,默认值为true
        numberPicker.setWrapSelectorWheel(false);
    

    NumberPicker默认点击是可以编辑的,就像这样:

    可编辑状态.png

    所以我们需要加上一行代码,来使得NumberPicker不可编辑:

        //设置不可编辑
        numberPicker.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);
    

    这样基本就能用了,现在我们需要对它设置监听,来拿到选择结果:

        numberPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
            @Override
            public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
                //得到选择结果
            }
        });
    

    接下来的操作可能就稍微显得麻烦一点了,我们先来看看如何设置分割线的颜色,这里我们采用的是反射的方式:

        private void setNumberPickerDividerColor(NumberPicker numberPicker) {
            Field[] pickerFields = NumberPicker.class.getDeclaredFields();
            for (Field pf : pickerFields) {
                if (pf.getName().equals("mSelectionDivider")) {
                    pf.setAccessible(true);
                    try {
                        //设置分割线的颜色值
                        pf.set(numberPicker, new ColorDrawable(getResources().getColor(R.color.numberpicker_divider_color)));
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    }
                    break;
                }
            }
        }
    

    最后我们来看看如何修改字体颜色和大小,新建一个类继承NumberPicker:

    public class TextConfigNumberPicker extends NumberPicker {
    
        public TextConfigNumberPicker(Context context) {
            super(context);
        }
    
        public TextConfigNumberPicker(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public TextConfigNumberPicker(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.black));
                ((EditText) view).setTextSize(16);
            }
        }
    }
    

    结语

    好了,关于NumberPicker的基本用法和常见问题就介绍到这里,希望对大家有所帮助。如有问题,欢迎指正。

    相关文章

      网友评论

        本文标题:Android NumberPicker的基本用法及常见问题汇总

        本文链接:https://www.haomeiwen.com/subject/kjzysxtx.html