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

Posted 骑鲸鱼的企鹅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于Android(Kotlin)日期区间选择器/时间区间选择器——日历区间选择器的主要内容,如果未能解决你的问题,请参考以下文章

自定义酒店日期选择器

自定义酒店日期选择器

android MD 日期选择器,时间选择器

Android 时间和日期选择器

在android中设置时间和日期到日期选择器和时间选择器

android有月份选择器吗?或者怎么让日期选择器的日期不显示,只显示年份和月份