PickerView

under Android  tag     Published on April 19th , 2021 at 02:28 pm

PickerView 是一款仿 iOS 控件,有时间选择器和条件选择器。

  • TimePickerView 时间选择器,支持年月日时分,年月日,年月,时分等格式。
  • OptionsPickerView 条件选择器,支持一,二,三级选项选择,并且可以设置是否联动。

时间选择器

条件选择器

项目地址

使用

1. 添加 Gradle依赖:根据项目版本更新说明修改版本号

implementation 'com.contrarywind:Android-PickerView:4.1.9'

2. 直接在代码中声明使用

  • 时间选择器

代码中未设置时间,默认为系统时间。

    private TimePickerView timePickerView;
    timePickerView = new TimePickerBuilder(MainActivity.this, new OnTimeSelectListener() {
            @Override
            public void onTimeSelect(Date date, View v) {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
                String time = sdf.format(date);
                tv.setText(time);
            }
        })
            .build();
        timePickerView.show();
  • 条件选择器
        private OptionsPickerView optionsPickerView;
        List<String> strings = new ArrayList<>();
        strings.add("北京");
        strings.add("杭州");
        strings.add("上海");
        optionsPickerView = new OptionsPickerBuilder(MainActivity.this, new OnOptionsSelectListener() {
            @Override
            public void onOptionsSelect(int options1, int options2, int options3, View v) {
                tv2.setText(strings.get(options1));
            }
        }).build();
        optionsPickerView.setPicker(strings);
        optionsPickerView.show();

效果图上按钮样式太难看?可以自定义!

setLayoutRes() 第一个参数需要的是布局文件
注意:
1、自定义布局中,id为 optionspicker 或者 timepicker 的布局以及其子控件必须要有,否则会报空指针
2、要重新设置监听事件

    timePickerView = new TimePickerBuilder(MainActivity.this, new OnTimeSelectListener() {
            @Override
            public void onTimeSelect(Date date, View v) {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
                String time = sdf.format(date);
                tv.setText(time);
            }
        })
                .setLayoutRes(R.layout.pickerview_time, new CustomListener() {
                    @Override
                    public void customLayout(View v) {
                        RelativeLayout rv_topbar = v.findViewById(R.id.rv_topbar);
                        Button btnCancel = v.findViewById(R.id.btnCancel);
                        Button btnSubmit = v.findViewById(R.id.btnSubmit);
                        rv_topbar.setBackgroundColor(Color.WHITE);
                        btnCancel.setBackgroundColor(Color.WHITE);
                        btnCancel.setTextColor(Color.BLACK);
                        btnSubmit.setBackgroundColor(Color.WHITE);
                        btnSubmit.setTextColor(Color.BLACK);
                        btnCancel.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                timePickerView.dismiss();
                            }
                        });
                        btnSubmit.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                timePickerView.returnData();
                                timePickerView.dismiss();
                            }
                        });
                    }
                })
                .build();
        timePickerView.show();

效果图:

部分方法名与参数说明

.setOutSideCancelable(boolean cancelable) // 点击 View 外部 View 消失,默认为 true
.setDividerType(WheelView.DividerType dividerType) // 设置分割线类型。FILL, WRAP, CIRCLE(一条直线,好几条短线,一个圈)
.setDividerColor(@ColorInt int dividerColor) // 设置分割线颜色
.isDialog(boolean isDialog) // 以弹窗形式居于屏幕中间显示,默认为 false
.show(View v) // 用于显示选择器,其中 v 会传到回调方法中
.isCenterLabel(boolean isCenterLabel) // 是否只显示中间选中项的 label 文字,false 则每项 item 全部都带有 label,label 是日期后面的年月日等等,默认为 false(效果图上的样子)
.setBackgroundId(int backgroundId) // 设置遮罩背景颜色。试了一下白色,没有用,设置其他颜色太难看了

点击项目源码查看更多方法


本文由 surface 创作,采用 知识共享署名4.0 国际许可协议进行许可,转载前请务必署名
  文章最后更新时间为:May 7th , 2021 at 06:16 pm
分享到:Twitter  Weibo  Facebook