Android之DatePicker的使用

2022-02-23  本文已影响0人  SeekLife0

案例:
要求,只能选择从当前时间往后的日期。


图片.png

1、使用
布局

              <com.hjq.shape.layout.ShapeRelativeLayout
                    android:id="@+id/srl_date"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    >

                    <com.hjq.shape.view.ShapeTextView
                        android:id="@+id/stv_date_1"
                        android:layout_width="wrap_content"
                        android:layout_height="25dp"
                        android:layout_centerVertical="true"
                        android:layout_marginTop="10dp"
                        android:gravity="center"
                        android:paddingHorizontal="20dp"
                        android:text="年/月/日"
                        app:shape_radius="15dp"
                        app:shape_solidColor="@color/houseCondition" />

                    <View
                        android:id="@+id/v_line"
                        android:layout_width="17dp"
                        android:layout_height="1dp"
                        android:layout_centerVertical="true"
                        android:layout_marginHorizontal="2dp"
                        android:layout_marginTop="10dp"
                        android:layout_toRightOf="@+id/stv_date_1"
                        android:background="@color/btnColor" />

                    <com.hjq.shape.view.ShapeTextView
                        android:id="@+id/stv_date_2"
                        android:layout_width="wrap_content"
                        android:layout_height="25dp"
                        android:layout_centerVertical="true"
                        android:layout_marginTop="10dp"
                        android:layout_toRightOf="@id/v_line"
                        android:gravity="center"
                        android:paddingHorizontal="20dp"
                        android:text="年/月/日"
                        app:shape_radius="15dp"
                        app:shape_solidColor="@color/houseCondition" />

                </com.hjq.shape.layout.ShapeRelativeLayout>

在activity中

//找到布局的控件
@BindView(R.id.stv_date_1)
lateinit var stvDate1: ShapeTextView
@BindView(R.id.stv_date_2)
lateinit var stvDate2: ShapeTextView

//装修 -> 入住日期(存储为Date类型是为了把该日期传回给后端,后端的接收类型为Date)
private var renovationDate : Date? = null
private var checkInDate : Date? = null

@OnClick(R.id.stv_date_1)
    fun checkStart() {
        //获取日历的一个实例,里面包含了当前的年月日
        val calendar: Calendar = Calendar.getInstance()
        //构建一个日期对话框,该对话框已经集成了日期选择器
        //DatePickerDialog的第二个构造参数指定了日期监听器
        val dialog = DatePickerDialog(
            this, object : DatePickerDialog.OnDateSetListener {
                override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {
                    val desc = String.format(
                        "%d年%d月%d日",
                        year,
                        month + 1,
                        dayOfMonth
                    )
                    stvDate1.setText(desc) //选择的日期显示在textView中
                    var date = SimpleDateFormat("yyyy年MM月dd日")
                    var subDate = date.parse(desc)
                    renovationDate = subDate
                }
            },
            calendar.get(Calendar.YEAR),
            calendar.get(Calendar.MONTH),
            calendar.get(Calendar.DAY_OF_MONTH)
        )
        var dp = dialog.datePicker
        dp.minDate = Date().time
        //把日期对话框显示在界面上
        dialog.show()
    }

    @OnClick(R.id.stv_date_2)
    fun checkEnd() {
        //获取日历的一个实例,里面包含了当前的年月日
        val calendar: Calendar = Calendar.getInstance()
        //构建一个日期对话框,该对话框已经集成了日期选择器
        //DatePickerDialog的第二个构造参数指定了日期监听器
        val dialog = DatePickerDialog(
            this, object : DatePickerDialog.OnDateSetListener {
                override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {
                    val desc = String.format(
                        "%d年%d月%d日",
                        year,
                        month + 1,
                        dayOfMonth
                    )
                    stvDate2.setText(desc) //选择的日期显示在textView中
                    var date = SimpleDateFormat("yyyy年MM月dd日")
                    var subDate = date.parse(desc)
                    checkInDate = subDate
                }

            },
            calendar.get(Calendar.YEAR),
            calendar.get(Calendar.MONTH),
            calendar.get(Calendar.DAY_OF_MONTH)
        )
        var dp = dialog.datePicker
        //设置日期选择器能选择的最小日期,从当前日期开始选择。
        dp.minDate = Date().time
        //把日期对话框显示在界面上
        dialog.show()
    }

2、注意事项
回传使用rxhttp、fastJson,先把数据封装到一个json数据格式中,此时fastJson的Date类型解析不能使用默认的解析方式,应该使用与后端解析保持一致,比如这里地方"yyyy-MM-dd"。所以这里修改了fastJson的解析格式,在代码的第二行可以看到,这是一个坑。

//量身营造提交请求
    fun requestSubmit(madeOrderParam : MadeOrderParam) {
        JSONObject.DEFFAULT_DATE_FORMAT="yyyy-MM-dd"  //设置日期格式
        val `object`: JSONObject = JSONObject()
        `object`["housePlanId"] = madeOrderParam.housePlanId
        `object`["deviseInfo"] = madeOrderParam.deviseInfo
        //rxhttp获取后台数据
        RxHttp.postJson(Constant.CUSTOM_ORDER)
            .addHeader(Constant.TOKEN, AppSharedPreferences.getInstance(me).token)
            .addAll(`object`.toJSONString())
            .asClass(Response::class.java)
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe({ a ->
                if(a.isSuccess){
                    Log.e("量身营造设计需求提交调试", "量身营造设计需求提交是否成功:" + a.isSuccess + "状态码:" + a.status)
                    val toast = Toast.makeText(this, "设计需求提交成功", Toast.LENGTH_SHORT)
                    toast.setGravity(Gravity.CENTER, 0, 0)
                    toast.show()
                    Log.e("设计需求提交调试","housePlanId->${madeOrderParam.housePlanId}")
                    Log.e("设计需求提交调试","deviseInfo->${madeOrderParam.deviseInfo}")
                }else{
                    Log.e("量身营造设计需求提交调试", "量身营造设计需求提交是否成功:" + a.isSuccess + "状态码:" + a.status + "msg" + a.msg)
                    val toast = Toast.makeText(this, "设计需求提交失败" , Toast.LENGTH_SHORT)
                    toast.setGravity(Gravity.CENTER, 0, 0)
                    toast.show()
                }
            }, { throwable ->
                Log.e("量身营造设计需求提交调试", "error:" + throwable)
                val toast = Toast.makeText(this, "量身营造设计需求提交失败", Toast.LENGTH_SHORT)
                toast.setGravity(Gravity.CENTER, 0, 0)
                toast.show()
            })
    }
上一篇下一篇

猜你喜欢

热点阅读