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)日期区间选择器/时间区间选择器——日历区间选择器的主要内容,如果未能解决你的问题,请参考以下文章