Skip to content

English Documentation

xiaosongzeem edited this page Oct 20, 2019 · 52 revisions

Introduction

This is a library for android to pick date or options like IOS system WheelView widget. and support for the linkage, dialog . It's very easy to use , and you also can customize layout, which make it very customizable.

  • there are two options called OptionsPickerView and TimePickerView

  • OptionsPickerView supports three levels of linkage

  • TimePickerView support selection date range

  • support "year, month, day, hour, minute, second", "provincial, city, district" and other options of the unit (label) show or hide and customize label.

  • supports custom text, color, text size, etc.

  • If Item text length is too long, it will be adapted to the length of the Item to avoid the problem of incomplete display

How to use

1.Add the dependency:

Gradle

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

2.Add the following code in your project:

//TimePicker
 pvTime = new TimePickerBuilder(this, new OnTimeSelectListener() {
            @Override
            public void onTimeSelect(Date date,View v) {//Callback
                tvTime.setText(getTime(date));
            }
        })
             .build();
 pvTime.show();
//OptionsPicker
 pvOptions = new  OptionsPickerBuilder(this, new OnOptionsSelectListener() {
            @Override
            public void onOptionsSelect(int options1, int option2, int options3 ,View v) {
                ////Callback
                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);
 //pvOptions.setPicker(options1Items, options2Items);
 pvOptions.setPicker(options1Items, options2Items, options3Items);
 pvOptions.show(); 

Just so easy ~

If the default style does not meet your expectations, You can also customize attributes to apply

Customize Useage:

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

 pvTime = new TimePickerBuilder(this, new OnTimeSelectListener() {
            @Override
            public void onTimeSelect(Date date,View v) {//Callback
                tvTime.setText(getTime(date));
            }
        })
                .setType(new boolean[]{true, true, true, false, false, false})//Year, month, day, hour, minute, second.
                .setCancelText("Cancel")
                .setSubmitText("Sure")
                .setContentSize(18)
                .setTitleSize(20)
                .setTitleText("Title")
                .setOutSideCancelable(false)// default is true
                .isCyclic(true)// default is false
                .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)//default 1900-2100 years 
                .setDate(selectedDate)// default is System time
                .setRangDate(startDate,endDate)
                .setLabel("year","month","day","hours","mins","seconds")
                .build();
pvOptions = new  OptionsPickerBuilder(this, new OnOptionsSelectListener() {
            @Override
            public void onOptionsSelect(int options1, int option2, int options3 ,View v) {
                ////Callback
                String tx = options1Items.get(options1).getPickerViewText()
                        + options2Items.get(options1).get(option2)
                        + options3Items.get(options1).get(option2).get(options3).getPickerViewText();
                tvOptions.setText(tx);
            }
        })
                .setSubmitText("sure")
                .setCancelText("cancel")
                .setTitleText("title")
                .setSubCalSize(18)
                .setTitleSize(20)
                .setTitleColor(Color.BLACK)
                .setSubmitColor(Color.BLUE)
                .setCancelColor(Color.BLUE)
                .setTitleBgColor(0xFF666666)//Night mode
                .setBgColor(0xFF444444)//Night mode
                .setContentTextSize(18)
                .setLinkage(false)
                .setLabels("province", "city", "district")
                .setCyclic(false, false, false)
                .setSelectOptions(0, 0, 0)  //default options
                .setOutSideCancelable(false)//dismiss, default is true
                .build();

        pvOptions.setPicker(options1Items, options2Items, options3Items);

Customize Layout:

  private void initCustomTimePicker() {
        // be careful:In the custom layout, the layout of the ID for optionspicker 
        // or TimePicker and its child widget must not be modified, 
        // otherwise  will be reported NullPointerException
        // For more details, Please refer to the two custom layouts in demo 

        Calendar selectedDate = Calendar.getInstance();//System current time
        Calendar startDate = Calendar.getInstance();
        startDate.set(2013,1,23);
        Calendar endDate = Calendar.getInstance();
        endDate.set(2019,2,28);
       
        pvCustomTime = new TimePickerBuilder(this, new OnTimeSelectListener() {
            @Override
            public void onTimeSelect(Date date, View v) {//call back
                btn_CustomTime.setText(getTime(date));
            }
        })      .setType(TimePickerView.Type.YEAR_MONTH_DAY)
                .setDate(selectedDate)
                .setRangDate(startDate,endDate)
                .setLayoutRes(R.layout.pickerview_custom_time, new CustomListener() {

                    @Override
                    public void customLayout(View v) {
                        final TextView tvSubmit = (TextView) v.findViewById(R.id.tv_finish);
                        ImageView ivCancel = (ImageView) v.findViewById(R.id.iv_cancel);
                        tvSubmit.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                pvCustomTime.returnData(tvSubmit);
                            }
                        });
                        ivCancel.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                pvCustomTime.dismiss();
                            }
                        });
                    }
                })
                .setDividerColor(Color.BLACK)
                .build();
    }

If you do need to set the no linkage data:

pvNoLinkOptions = new OptionsPickerBuilder(this, new OnOptionsSelectListener() {

            @Override
            public void onOptionsSelect(int options1, int options2, int options3, View v) {

                String str = "food:"+food.get(options1)
                        +"\nclothes:"+clothes.get(options2)
                        +"\ncomputer:"+computer.get(options3);

                Toast.makeText(MainActivity.this,str,Toast.LENGTH_SHORT).show();
            }
        }).build();
        pvNoLinkOptions.setNPicker(food,clothes,computer);
        pvNoLinkOptions.show();

For more detail, pelase refer to the Demo code, If there is still doubt about you, pelase New Issue to me