Skip to content

中文说明文档(3.x版)

xiaosongzeem edited this page Mar 20, 2017 · 55 revisions

Android-PickerView

方法名与参数请看这里:方法名与参数说明文档

使用步骤:

1.添加Jcenter仓库 Gradle依赖:

compile 'com.contrarywind:Android-PickerView:3.1.0'

2.在Activity中添加如下代码:

//时间选择器
TimePickerView pvTime = new TimePickerView.Builder(this, new TimePickerView.OnTimeSelectListener() {
            @Override
            public void onTimeSelect(Date date,View v) {//选中事件回调
                tvTime.setText(getTime(date));
            }
        })
             .build();
 pvTime.setDate(Calendar.getInstance());//注:根据需求来决定是否使用该方法(一般是精确到秒的情况),此项可以在弹出选择器的时候重新设置当前时间,避免在初始化之后由于时间已经设定,导致选中时间与当前时间不匹配的问题。
 pvTime.show();
//条件选择器
 OptionsPickerView pvOptions = new  OptionsPickerView.Builder(this, new OptionsPickerView.OnOptionsSelectListener() {
            @Override
            public void onOptionsSelect(int options1, int option2, int options3 ,View v) {
                //返回的分别是三个级别的选中位置
                String tx = options1Items.get(options1).getPickerViewText()
                        + options2Items.get(options1).get(option2)
                        + options3Items.get(options1).get(option2).get(options3).getPickerViewText();
                tvOptions.setText(tx);
            }
        }).build();
 pvOptions.setPicker(options1Items, options2Items, options3Items);
 pvOptions.show(); 

大功告成~

3.如果默认样式不符合你的口味,可以自定义各种属性:

 Calendar selectedDate = Calendar.getInstance();
 Calendar startDate = Calendar.getInstance();
 startDate.set(2013,1,1);
 Calendar endDate = Calendar.getInstance();
 endDate.set(2020,1,1);

 pvTime = new TimePickerView.Builder(this, new TimePickerView.OnTimeSelectListener() {
            @Override
            public void onTimeSelect(Date date,View v) {//选中事件回调
                tvTime.setText(getTime(date));
            }
        })
                .setType(TimePickerView.Type.ALL)//默认全部显示
                .setCancelText("Cancel")//取消按钮文字
                .setSubmitText("Sure")//确认按钮文字
                .setContentSize(18)//滚轮文字大小
                .setTitleSize(20)//标题文字大小
                .setTitleText("Title")//标题文字
                .setOutSideCancelable(false)//点击屏幕,点在控件外部范围时,是否取消显示
                .isCyclic(true)//是否循环滚动
                .setTitleColor(Color.BLACK)//标题文字颜色
                .setSubmitColor(Color.BLUE)//确定按钮文字颜色
                .setCancelColor(Color.BLUE)//取消按钮文字颜色
                .setTitleBgColor(0xFF666666)//标题背景颜色 Night mode
                .setBgColor(0xFF333333)//滚轮背景颜色 Night mode
                .setRange(calendar.get(Calendar.YEAR) - 20, calendar.get(Calendar.YEAR) + 20)//默认是1900-2100年
                .setDate(selectedDate)// 如果不设置的话,默认是系统时间*/
                .setRangDate(startDate,endDate)//起始终止年月日设定
                .setLabel("年","月","日","时","分","秒")
                .isDialog(true)//是否显示为对话框样式
                .build();
pvOptions = new  OptionsPickerView.Builder(this, new OptionsPickerView.OnOptionsSelectListener() {
            @Override
            public void onOptionsSelect(int options1, int option2, int options3 ,View v) {
                //返回的分别是三个级别的选中位置
                String tx = options1Items.get(options1).getPickerViewText()
                        + options2Items.get(options1).get(option2)
                        + options3Items.get(options1).get(option2).get(options3).getPickerViewText();
                tvOptions.setText(tx);
            }
        })
                .setSubmitText("确定")//确定按钮文字
                .setCancelText("取消")//取消按钮文字
                .setTitleText("城市选择")//标题
                .setSubCalSize(18)//确定和取消文字大小
                .setTitleSize(20)//标题文字大小
                .setTitleColor(Color.BLACK)//标题文字颜色
                .setSubmitColor(Color.BLUE)//确定按钮文字颜色
                .setCancelColor(Color.BLUE)//取消按钮文字颜色
                .setTitleBgColor(0xFF333333)//标题背景颜色 Night mode
                .setBgColor(0xFF000000)//滚轮背景颜色 Night mode
                .setContentTextSize(18)//滚轮文字大小
                .setLinkage(false)//设置是否联动,默认true
                .setLabels("省", "市", "区")//设置选择的三级单位
                .setCyclic(false, false, false)//循环与否
                .setSelectOptions(1, 1, 1)  //设置默认选中项
                .setOutSideCancelable(false)//点击外部dismiss default true
                .isDialog(true)//是否显示为对话框样式
                .build();

        pvOptions.setPicker(options1Items, options2Items, options3Items);//添加数据源

4.如果需要自定义布局:

        // 注意:自定义布局中,id为 optionspicker 或者 timepicker 的布局以及其子控件必须要有,否则会报空指针
        // 具体可参考demo 里面的两个自定义布局
        pvCustomOptions = new OptionsPickerView.Builder(this, new OptionsPickerView.OnOptionsSelectListener() {
            @Override
            public void onOptionsSelect(int options1, int option2, int options3, View v) {
                //返回的分别是三个级别的选中位置
                String tx = cardItem.get(options1).getPickerViewText();
                btn_CustomOptions.setText(tx);
            }
        })
                .setLayoutRes(R.layout.pickerview_custom_options, new CustomListener() {
                    @Override
                    public void customLayout(View v) {
                        //自定义布局中的控件初始化及事件处理
                        final TextView tvSubmit = (TextView) v.findViewById(R.id.tv_finish);
                        final TextView tvAdd = (TextView) v.findViewById(R.id.tv_add);
                        ImageView ivCancel = (ImageView) v.findViewById(R.id.iv_cancel);
                        tvSubmit.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                pvCustomOptions.returnData(tvSubmit);
                            }
                        });
                        ivCancel.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                pvCustomOptions.dismiss();
                            }
                        });

                        tvAdd.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                getData();
                                pvCustomOptions.setPicker(cardItem);
                            }
                        });

                    }
                })
                .build();
        pvCustomOptions.setPicker(cardItem);//添加数据

5.对使用还有疑问的话,可参考Demo代码

请戳我查看demo代码

#更新说明

V3.1.2版本更新说明(2017-3-20)

  • 修复:多级选项时,不同选项最大文字高度不同导致分割线不在同一水平问题
  • 新增:选项选择器的字体样式设置(setTypeface方法)

V3.1.1版本更新说明(2017-3-15)

  • 修复:timePicker的label单位设置为空,但隐藏无效问题

V3.1.0版本更新说明(2017-3-14)

  • 修复:在自定义布局模式中,设置setOutSideCancelable无效问题
  • 修复:在自定义布局模式中,设置Dialog出现异常情况

V3.0.9版本更新说明(2017-3-13)

  • 优化:多分辨率适配,修复低分辨率手机下显示偏差问题
  • 优化:将系统返回键点击事件封装到BasePickerView,免去在Activity中重写onKeyDown方法。

V3.0.8版本更新说明(2017-3-7)

  • 修复timepicker只能在初始化时设置一次默认选中时间的问题

V3.0.7版本更新说明(2017-3-4)

  • 优化 起始终止年月日范围设置
  • 新增自定义布局

V3.0.6版本更新说明(2017-3-3)

  • 新增对话框模式
  • 新增timePicker “年月日时分”显示类型
  • 新增分隔线的显示类型选择(FILL、WARP)
  • 新增options默认选中项的调用方法(可重复设置);
  • 优化选中项显示位置有微小偏差问题

V3.0.5版本更新说明(2017-2-28)

  • 优化:数据源由ArrayList 改为List 类型
  • 优化:在时间选择器中,隐藏单位标签的情况下,修复滚轮偏左的问题。
  • 修复:lib去除 v7 compat包 依赖,解决某些情况下support包冲突问题。

V3.0.4版本更新说明(2017-2-27)

  • 新增分割线颜色设置
  • 新增滚轮的选中文字颜色设置
  • 新增滚轮的未选中文字颜色设置
  • 新增滚轮横线的间隔倍数设置

V3.0.3版本更新说明(2017-2-24)

  • 新增标题栏和滚轮的背景color区分设置
  • 修正选项选择器设置默认选中项失效的问题
  • 修正选中项颜色问题
  • 调整UI,修复确定取消按钮显示偏差问题

V3.0.2版本更新说明(2017-2-23)

  • 时间选择器的Label自定义设置
  • 修正标题栏背景默认颜色
  • 优化demo代码

V3.0.1版本更新说明(2017-2-22)

  • 新增确定、取消按钮的颜色、字体大小设置
  • 新增标题文字的颜色、字体大小设置
  • 新增背景颜色设置
  • 项目代码重构
  • 删除冗余代码,修复若干BUG
  • 手机系统语言识别,中英文识别自动替换文字