Android(Kotlin)日期区间选择器/时间区间选择器——日历区间选择器

现在很多已经用起了Kotlin语言写安卓项目,

项目里面有一个需求,选择日期范围,刷新选择的时间区间所检索的数据,

在某大牛原控件的基础上,做了一个拓展使用,可解决一些原控件的bug问题。

文内只写了日期的选择使用,时间的选择类似,

控件api可以去控件原地址参详:https://github.com/borax12/MaterialDateRangePicker

Demo里有各个方法的详细的操作注释。

Demo地址:https://download.csdn.net/download/w630886916/10605044

 

先上个简单的效果图:

代码显示:

主控制页面:

class MainActivity : AppCompatActivity(), DatePickerDialog.OnDateSetListener {


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        button.setOnClickListener {
            //显示时间选择器弹窗
            showDatePickerDialog()
        }
    }

    //显示 日期选择器
    private fun showDatePickerDialog() {
        val now = Calendar.getInstance()
        val dpd = DatePickerDialog.newInstance(
                this@MainActivity,
                now.get(Calendar.YEAR),
                now.get(Calendar.MONTH),
                now.get(Calendar.DAY_OF_MONTH)
        )
        dpd.show(fragmentManager, "Datepickerdialog")
    }

    /**
     * @param yearn年(始)例:2018
     * @param monthOfYear月(始)例:8
     * @param dayOfMonth日(始)例:15
     * @param yearEnd(结束)例:2018
     * @param monthOfYearEnd(结束)例:8
     * @param dayOfMonthEnd(结束)例:16
     * 由于发现 此控件有个bug,显示的月份少1月,故在取数据的时候,加1.
     */
    override fun onDateSet(view: DatePickerDialog?, year: Int, monthOfYear: Int, dayOfMonth: Int, yearEnd: Int, monthOfYearEnd: Int, dayOfMonthEnd: Int) {
        //开始时间的时间戳
        val timeStart = DateUtils.getTimeStart("" + year + "年" + (monthOfYear + 1) + "月" + dayOfMonth + "日")
        //结束时间的时间戳
        val timeEnd = DateUtils.getTimeEnd("" + yearEnd + "年" + (monthOfYearEnd + 1) + "月" + dayOfMonthEnd + "日")

        Log.d("&&&&&&&&&&&", "【" + year + "年" + (monthOfYear + 1) + "月" + dayOfMonth + "日" + "】——到——【" +
                yearEnd + "年" + (monthOfYearEnd + 1) + "月" + dayOfMonthEnd + "日】")

        Log.d("&&&&&&&&&&&", "【开始时间戳:" + timeStart + "】——到——【" + "结束时间戳:" + timeEnd + "】")

        //如果需要一些判断操作,可以try-catch 一下 或 if-else 判断
        try {
            if (timeStart?.toLong()!! > timeEnd?.toLong()!!) {
                Toast.makeText(this, "结束时间不能小于开始时间", Toast.LENGTH_SHORT).show()
                return
            }
        } catch (e: Exception) {
            Toast.makeText(this, "选择时间的有误", Toast.LENGTH_SHORT).show()
        }
    }
}

工具类:

object DateUtils {

    /**
     * 字符串转时间戳
     * 开始时间
     * @param timeString 年月日的String
     * @return 转化年月日为时间戳String(适配PHP 除以1000)-后台是java的话则不用除以1000
     */
    fun getTimeStart(timeString: String): String? {
        var timeStamp: String? = null
        val sdf = SimpleDateFormat("yyyy年MM月dd日")
        val d: Date
        try {
            d = sdf.parse(timeString)
            var l = d.time
            if (l.toString().length > 10) {
                l = l / 1000
            }
            timeStamp = l.toString()
        } catch (e: ParseException) {
            e.printStackTrace()
        }
        return timeStamp
    }

    /**
     * 字符串转时间戳
     * 结束时间- 追加23小时59分钟
     * @param timeString 年月日的String
     * @return 转化年月日为时间戳String(适配PHP 除以1000)-后台是java的话则不用除以1000
     */
    fun getTimeEnd(timeString: String): String? {
        var timeStamp: String? = null
        val sdf = SimpleDateFormat("yyyy年MM月dd日HH:mm")
        val d: Date
        try {
            d = sdf.parse((timeString + "23:59"))
                    var l = d . time
                    if (l.toString().length > 10) {
                        l = l / 1000
                    }
            timeStamp = l.toString()
        } catch (e: ParseException) {
            e.printStackTrace()
        }
        return timeStamp
    }
}

控件的导入:

build.gradle里面直接导入:

compile 'com.borax12.materialdaterangepicker:library:1.9'

 

部分自定义方式:

我们知道,build.gradle导入的控件,很多情况是不方便直接修改的。但是我们这里查看源码的时候,发现大牛写的很好,很多地方是引用 资源values里面的,这也就方便了我们修改和部分自定义:

我们直接在自己的资源values里面,对照的控件里的资源名称,重新写一份自定义的设置就行,系统是会“覆盖引用”的。

找到资源包的位置,和资源文件,查看对应的引用参数,自己定义即可。

这里有个Android Studio 工具的使用小技巧:按住Ctrl键+鼠标点方法名,自动打开控件代码页,左边列表里有个◎(如图),点击一下,会自动定位到资源位置。然后自己查看源码对照引用参数,自定义即可。

我这里举例:修改了FROM和TO 变成开始时间 和 结束时间。

 

好了,欢迎大家一起学习指正。

Demo地址:https://download.csdn.net/download/w630886916/10605044

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值