对Bigkoo/Android-PickerView 时间选择器的修改

最近的项目里要用到时间选择器,找了许久看到了比较成熟稳定的Bigkoo/Android-PickerView,拿来用了一下:

TimePickerView pvTime = new TimePickerBuilder(this, new OnTimeSelectListener() {
            @Override
            public void onTimeSelect(Date date, View v) {//选择的
                Log.i(TAG, "pvTime onTimeSelect:"+date.getTime());
            }
        }).setTimeSelectChangeListener(new OnTimeSelectChangeListener() {
                    @Override
                    public void onTimeSelectChanged(Date date) {
                        Log.i(TAG, "pvTime onTimeSelectChanged:"+date.getTime());
                    }
                })
                .setTitleText(getString(R.string.device_dialog_title_time))//标题文字
                .setSubmitColor(getResources().getColor(R.color.colorPrimary))//确定按钮文字颜色
                .setCancelColor(getResources().getColor(R.color.color_gray))//取消按钮文字颜色
                .setContentTextSize(18)//滚轮文字大小
                .setType(new boolean[]{false, false, false, true, true, false})
                .isDialog(true) //默认设置false ,内部实现将DecorView 作为它的父控件。
                .build();
		Dialog dialogTimePicker = pvTime.getDialog();
        dialogTimePicker.getWindow().setGravity(Gravity.BOTTOM);//设置底部弹出
        dialogTimePicker.getWindow().setWindowAnimations(R.style.AnimDialogTools);//设置动画        		 
        dialogTimePicker.getWindow().setBackgroundDrawableResource(android.R.color.transparent);

没能自定义背景和title背景,加之需求变更了所以最后决定自定义。用weelView自定义显然成本过高,有什么办法能复用呢?
通过查看源码,发现以Builder形式建立TimePickerView控件,而TimePickerView控件中控制时间选择器的关键是WheelTime,因此我们如果直接使用WheelTime该有多好?
经过种种尝试我失败了,一直在wv_day.setAdapter报空指针异常
显然是有问题的,但是很不好解决,而且在布局上并不优化,于是我决定不用他的布局了,自己写一个。
于是我转变思路看起了weelTime的源码,它在内部对6个WeelView进行了控制。于是我复制了一份WeelTimer的代码,并开放了部分修改项,并使用了mPickerOptions减少内部变量的定义。同时修改了原来的输出方式,代码传送门

在布局中引入下面部分
<LinearLayout
        android:id="@+id/ll_wheel"
        android:layout_width="match_parent"
        android:layout_height="150dp"
        android:layout_marginLeft="@dimen/space_15"
        android:layout_marginRight="@dimen/space_15"
        android:layout_marginBottom="@dimen/space_15"
        android:orientation="horizontal">
        <com.contrarywind.view.WheelView
            android:id="@+id/wv_year"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent" />
        <com.contrarywind.view.WheelView
            android:id="@+id/wv_month"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent" />
        <com.contrarywind.view.WheelView
            android:id="@+id/wv_day"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent" />
        <com.contrarywind.view.WheelView
            android:id="@+id/wv_hour"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent" />
        <com.contrarywind.view.WheelView
            android:id="@+id/wv_minute"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent" />
        <com.contrarywind.view.WheelView
            android:id="@+id/wv_second"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent" />
    </LinearLayout>

封装后的调用

WheelView[] views = new WheelView[6];
        views[0] = contentView.findViewById(R.id.wv_year);
        views[1] = contentView.findViewById(R.id.wv_month);
        views[2] = contentView.findViewById(R.id.wv_day);
        views[3] = contentView.findViewById(R.id.wv_hour);
        views[4] = contentView.findViewById(R.id.wv_minute);
        views[5] = contentView.findViewById(R.id.wv_second);
        weelViewHelper = new WeelViewHelper(getActivity(), views);        weelViewHelper.setTextColorCenter(getActivity().getResources().getColor(R.color.colorPrimary));
        weelViewHelper.setContentTextSize(17);
        weelViewHelper.setCyclic(true);
        weelViewHelper.setDateFormat(dateFormat);
        weelViewHelper.setType(new boolean[]{true, true, true, true, true, true});//默认全显示
		weelViewHelper.setLabels("年","月","日","时","分","秒");
            weelViewHelper.setListener(new WeelViewHelper.OnDataChangeListener() {
                @Override
                public void onDataChange(String data) {
                    if(isStart){
                        startDate.setText(data);
                    }else{
                        endDate.setText(data);
                    }
                }
            });
            //所有变更项目需要在Show之前变更完毕,否则不生效
            weelViewHelper.Show();

基于implementation ‘com.contrarywind:Android-PickerView:4.1.6’

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个高仿 IOS PickerView 控件的库。代码来自:https://github.com/saiwu-bigkoo/Android-PickerView ,在原有代码基础上进行封装,并提供了一些修改属性方法。后期如有时间,将会对原有代码进行优化。预览使用首先需要在 build.gradle 文件中添加依赖:dependencies {    compile 'com.airsaid.library:pickerviewlibrary:1.0.0' }添加好依赖后,重新同步工程。可根据需求使用如下选择:城市选择:        CityPickerView mCityPickerView = new CityPickerView(this);         // 设置点击外部是否消失 //        mCityPickerView.setCancelable(true);         // 设置滚轮字体大小 //        mCityPickerView.setTextSize(18f);         // 设置标题 //        mCityPickerView.setTitle("我是标题");         // 设置取消文字 //        mCityPickerView.setCancelText("我是取消文字");         // 设置取消文字颜色 //        mCityPickerView.setCancelTextColor(Color.GRAY);         // 设置取消文字大小 //        mCityPickerView.setCancelTextSize(14f);         // 设置确定文字 //        mCityPickerView.setSubmitText("我是确定文字");         // 设置确定文字颜色 //        mCityPickerView.setSubmitTextColor(Color.BLACK);         // 设置确定文字大小 //        mCityPickerView.setSubmitTextSize(14f);         // 设置头部背景 //        mCityPickerView.setHeadBackgroundColor(Color.RED);         mCityPickerView.setOnCitySelectListener(new CityPickerView.OnCitySelectListener() {             @Override             public void onCitySelect(String str) {                 Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();             }         });         mCityPickerView.show();时间选择: //     TimePickerView 同样有上面设置样式的方法         TimePickerView mTimePickerView = new TimePickerView(this, TimePickerView.Type.YEAR_MONTH_DAY);         // 设置是否循环 //        mTimePickerView.setCyclic(true);         // 设置滚轮文字大小 //        mTimePickerView.setTextSize(TimePickerView.TextSize.SMALL);         // 设置时间可选范围(结合 setTime 方法使用,必须在) //        Calendar calendar = Calendar.getInstance(); //        mTimePickerView.setRange(calendar.get(Calendar.YEAR) - 100, calendar.get(Calendar.YEAR));         // 设置选中时间 //        mTimePickerView.setTime(new Date());         mTimePickerView.setOnTimeSelectListener(new TimePickerView.OnTimeSelectListener() {             @Override             public void onTimeSelect(Date date) {                 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);                 Toast.makeText(MainActivity.this, format.format(date), Toast.LENGTH_SHORT).show();             }         });         mTimePickerView.show();选项选择:        OptionsPickerView<String> mOptionsPickerView = new OptionsPickerView<>(this);         final ArrayList<String> list = new ArrayList<>();         list.add("男");         list.add("女");         // 设置数据         mOptionsPickerView.setPicker(list);         // 设置选项单位 //        mOptionsPickerView.setLabels("性");         mOptionsPickerView.setOnOptionsSelectListener(new OptionsPickerView.OnOptionsSelectListener() {             @Override             public void onOptionsSelect(int option1, int option2, int option3) {                 String sex = list.get(option1);                 Toast.makeText(MainActivity.this, sex, Toast.LENGTH_SHORT).show();             }         });         mOptionsPickerView.show();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值