时间选择器、单项选择PickerView

第一步:在build文件中引用PickerView
//compile 'com.contrarywind:Android-PickerView:3.2.7'
//引用moudle pickerview

第二步:写一个时间选择器和单项选择的工具类
public class TimePickUtil {
    private static SimpleDateFormat formatter;
    private TimePickerView timePickerView;
    private Activity activity;
    private OptionsPickerView<Object> pvOptions;
    private String s;

    public TimePickUtils(Activity activity) {
        this.activity = activity;
    }

    //时间选择器弹框
    public void initTimePickerDialog(String selectTime, boolean isDialog) {
        Calendar selectedDate = Calendar.getInstance();
        if (!TextUtils.isEmpty(selectTime)) {
            Date date = strToDate(selectTime);
            if (date != null) {
                selectedDate.setTime(date);
            }
        } else {
            selectedDate.setTimeInMillis(System.currentTimeMillis());
        }
        Calendar startDate = Calendar.getInstance();
        startDate.set(1993, 0, 1);
        Calendar endDate = Calendar.getInstance();
        endDate.set(2099, 11, 0);
        timePickerView = new TimePickerBuilder(activity, new OnTimeSelectListener() {
            @Override
            public void onTimeSelect(Date date, View v) {
                if (timeListener != null) {
                    timeListener.setTime(TimeUtils.dateToString(date, "yyyy-MM-dd HH:mm"));
                }
            }
        })
                .setTimeSelectChangeListener(new OnTimeSelectChangeListener() {
                    @Override
                    public void onTimeSelectChanged(Date date) {
                        Log.i("pvTime", "onTimeSelectChanged");
                    }
                })
                .setCancelText("取消")//取消按钮文字
                .setSubmitText("确定")//确认按钮文字
                .setTitleText("请选择时间")//标题文字
                .setTitleSize(20)//标题文字大小
                .setOutSideCancelable(true)//点击屏幕,点在控件外部范围时,是否取消显示
                .isCyclic(false)//是否循环滚动
                .setLineSpacingMultiplier(2.0f)
                .setTextColorCenter(Color.BLACK)//设置选中项的颜色
                .setTitleColor(Color.BLACK)//标题文字颜色
                .setSubmitColor(Color.BLUE)//确定按钮文字颜色
                .setCancelColor(Color.BLUE)//取消按钮文字颜色
                .setType(new boolean[]{true, true, true, true, true, false})
                .isDialog(isDialog)
                .setRangDate(startDate, endDate)
                .setDate(selectedDate)
                .build();

        if (isDialog) {
            initDialog();
        }


    }

    public void showDialog() {
        timePickerView.show();
    }

    //dialog从底部弹出,设置其弹框位置
    private void initDialog() {
        Dialog mDialog = timePickerView.getDialog();
        if (mDialog != null) {
            FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT,
                    Gravity.BOTTOM);
            params.leftMargin = 0;
            params.rightMargin = 0;
            timePickerView.getDialogContainerLayout().setLayoutParams(params);

            Window dialogWindow = mDialog.getWindow();
            if (dialogWindow != null) {
                dialogWindow.setWindowAnimations(com.bigkoo.pickerview.R.style.picker_view_slide_anim);//修改动画样式
                dialogWindow.setGravity(Gravity.BOTTOM);//改成Bottom,底部显示
            }

        }
    }

    //单项选择
    public void showSelectDialog(List<String> bankNameList, String title, int pos) {
        OptionsPickerView pvOptions = new OptionsPickerBuilder(activity, (options1, options2, options3, v) -> {
            String strBankName = bankNameList.get(options1);
            if (itemClickListener != null) {
                itemClickListener.setText(strBankName, options1);
            }
        })
                .setDividerColor(Color.BLACK)
                .setTitleText(title)
                .setSelectOptions(pos)
                .setTextColorCenter(Color.BLACK)
                .setContentTextSize(20)
                .setLineSpacingMultiplier(2.0f)
                .setOutSideCancelable(true)
                .build();
        pvOptions.setPicker(bankNameList);
        pvOptions.show();
    }

    //城市区的选择
    public void setAddress(Context context, List<Object> options1Items, List<List<Object>> options2Items, List<List<List<Object>>> options3Items,
                           int pos1, int pos2, int pos3) {
        pvOptions = new OptionsPickerBuilder(context, (options1, options2, options3, v) -> {
            if (addressListener != null) {
                addressListener.setAddress(options1, options2, options3, v);
            }
        })
                //分隔线颜色。
                .setDividerColor(Color.parseColor("#BBBBBB"))
                //滚轮背景颜色
                .setBgColor(Color.parseColor("#F5F5F5"))
                //设置两横线之间的间隔倍数
                .setLineSpacingMultiplier(3.0f)
                //设置选中项的颜色
                .setTextColorCenter(Color.parseColor("#333333"))
                .isCenterLabel(true)
                // 设置选择的三级单位
                .setLabels("", "", "")
                //标题文字
                .setTitleText("地址选择")
                .setSubmitText("确定")//确定按钮文字
                .setCancelText("取消")//取消按钮文字
                .setTitleText("城市选择")//标题
//                .setSubCalSize(18)//确定和取消文字大小
//                .setTitleSize(20)//标题文字大小
                .setTitleColor(Color.BLACK)//标题文字颜色
                .setSubmitColor(Color.BLUE)//确定按钮文字颜色
                .setCancelColor(Color.BLUE)//取消按钮文字颜色
                //默认选中项
                .setSelectOptions(pos1, pos2, pos3)
                .build();
        pvOptions.setPicker(options1Items, options2Items, options3Items);//三级选择器
        pvOptions.show();

    }


    public static Date strToDate(String strDate) {
        if (strDate.length() > 11) {
            formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        } else {
            formatter = new SimpleDateFormat("yyyy-MM-dd");
        }
        Date date = null;
        try {
            date = formatter.parse(strDate);
            return date;
        } catch (ParseException e) {


        }
        return date;

    }

    public interface TimeListener {
        void setTime(String text);
    }

    private TimeListener timeListener;

    public TimeListener getTimeListener() {
        return timeListener;
    }

    public void setTimeListener(TimeListener timeListener) {
        this.timeListener = timeListener;
    }

    public interface ItemClickListener {
        void setText(String text, int position);
    }

    private ItemClickListener itemClickListener;


    public void setItemClickListener(ItemClickListener itemClickListener) {
        this.itemClickListener = itemClickListener;
    }

    public interface AddressListener {
        void setAddress(int options1, int options2, int options3, View view);
    }

    public void setAddressListener(AddressListener addressListener) {
        this.addressListener = addressListener;
    }

    private AddressListener addressListener;


}
第三步:Activity或者Fragment的使用
 timePickUtils = new TimePickUtils(this);
 timePickUtils.initTimePickerDialog(timeText1.getText().toString(), false);
//时间选择
   timePickUtil.initTimePicker(timeText1.getText().toString());
            timePickUtil.setClickListener(new TimePickUtil.ClickListener() {
                @Override
                public void setText(String text) {
                    timeText1.setText(text);
                }

                @Override
                public void setText(String text, int pos) {

                }
            });

//单项选择
  if (pos == -1) {
                pos = data.size() / 2;
            }
            timePickUtil.showSelectDialog(data, "请选择", pos);
            timePickUtil.setClickListener(new TimePickUtil.ClickListener() {
                @Override
                public void setText(String text) {
                }

                @Override
                public void setText(String text, int position) {
                    pos = position;
                    select_signle.setText(text);
                }
            });

   //城市选择三级联动
    //模拟地址数据
        List<Object> provice = new ArrayList<>();
        List<List<Object>> city = new ArrayList<>();
        List<List<List<Object>>> distract = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
//            if (i == 0) {
//                provice.add("请选择");
//            } else {
                provice.add("湖北省" + i);
//            }
            List<Object> data1 = new ArrayList<>();
            for (int j = 0; j < 10; j++) {
                List<List<Object>> data3 = new ArrayList<>();
//                if (j == 0) {
//                    data1.add("请选择");
//                } else {
                    data1.add("武汉市" + j);
//                }
                List<Object> data2 = new ArrayList<>();
                for (int k = 0; k < 10; k++) {
//                    if (k == 0) {
//                        data2.add("请选择");
//                    } else {
                        data2.add("洪山区" + k);
//                    }
                    data3.add(data2);
                }
                distract.add(data3);
            }
            city.add(data1);
        }

        pos1 = 3;
        pos2 = 3;
        pos3 = 3;
        address.setOnClickListener(view -> {
            timePickUtils.setAddress(MainActivity.this, provice, city, distract, pos1, pos2, pos3);
            timePickUtils.setAddressListener((options1, options2, options3, view1) -> {
                pos1 = options1;
                pos2 = options2;
                pos3 = options3;
                address.setText((String) provice.get(options1) + city.get(options1).get(options2) + distract.get(options1).get(options2).get(options3));
            });
        });


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,198评论 6 514
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,334评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,643评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,495评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,502评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,156评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,743评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,659评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,200评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,282评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,424评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,107评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,789评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,264评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,390评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,798评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,435评论 2 359

推荐阅读更多精彩内容