Android:这是一个让你心动的日期&时间选择组件
预览
引入
添加 JitPack repository
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
添加 Gradle依赖
dependencies {
...
implementation 'com.google.android.material:material:1.1.0' //为了防止不必要的依赖冲突,0.0.3开始需要自行依赖google material库
implementation 'com.github.loperSeven:DateTimePicker:0.3.0'//此处不保证最新版本,最新版需前往文末github查看
}
开始使用
内置弹窗CardDatePickerDialog
最简单的使用方式
//kotlin
CardDatePickerDialog.builder(this)
.setTitle("SET MAX DATE")
.setOnChoose {millisecond->
}.build().show()
//java
new CardDatePickerDialog.Builder(this)
.setTitle("SET MAX DATE")
.setOnChoose("确定", aLong -> {
//aLong = millisecond
return null;
}).build().show();
所有可配置属性
CardDatePickerDialog.builder(context)
.setTitle("CARD DATE PICKER DIALOG")
.setDisplayType(displayList)
.setBackGroundModel(model)
.showBackNow(true)
.setPickerLayout(layout)
.setDefaultTime(defaultDate)
.setMaxTime(maxDate)
.setMinTime(minDate)
.setWrapSelectorWheel(false)
.setThemeColor(color)
.showDateLabel(true)
.showFocusDateInfo(true)
.setLabelText("年","月","日","时","分")
.setOnChoose("选择"){millisecond->}
.setOnCancel("关闭") {}
.build().show()
可配置属性说明
设置标题
fun setTitle(value: String)
是否显示回到当前按钮
fun showBackNow(b: Boolean)
是否显示选中日期信息
fun showFocusDateInfo(b: Boolean)
设置自定义选择器
//自定义选择器Layout注意事详见 【定制 DateTimePicker】
fun setPickerLayout(@NotNull layoutResId: Int)
显示模式
// model 分为:CardDatePickerDialog.CARD//卡片,CardDatePickerDialog.CUBE//方形,CardDatePickerDialog.STACK//顶部圆角
// model 允许直接传入drawable资源文件id作为弹窗的背景,如示例内custom
fun setBackGroundModel(model: Int)
设置主题颜色
fun setThemeColor(@ColorInt themeColor: Int)
设置显示值
fun setDisplayType(vararg types: Int)
fun setDisplayType(types: MutableList<Int>)
设置默认时间
fun setDefaultTime(millisecond: Long)
设置范围最小值
fun setMinTime(millisecond: Long)
设置范围最大值
fun setMaxTime(millisecond: Long)
是否显示单位标签
fun showDateLabel(b: Boolean)
设置标签文字
/**
*示例
*setLabelText("年","月","日","时","分")
*setLabelText("年","月","日","时")
*setLabelText(month="月",hour="时")
*/
fun setLabelText(year:String=yearLabel,month:String=monthLabel,day:String=dayLabel,hour:String=hourLabel,min:String=minLabel)
设置是否循环滚动
/**
*示例(默认为true)
*setWrapSelectorWheel(false)
*setWrapSelectorWheel(DateTimeConfig.YEAR,DateTimeConfig.MONTH,wrapSelector = false)
*setWrapSelectorWheel(arrayListOf(DateTimeConfig.YEAR,DateTimeConfig.MONTH),false)
*/
fun setWrapSelectorWheel()
绑定选择监听
/**
*示例
*setOnChoose("确定")
*setOnChoose{millisecond->}
*setOnChoose("确定"){millisecond->}
*/
fun setOnChoose(text: String = "确定", listener: ((Long) -> Unit)? = null)
绑定取消监听
/**
*示例
*setOnCancel("取消")
*setOnCancel{}
*setOnCancel("取消"){}
*/
fun setOnCancel(text: String = "取消", listener: (() -> Unit)? = null)
选择器 DateTimePicker
xml中
app:layout 为自定义选择器布局 可参考 定制
DateTimePicker
<com.loper7.date_time_picker.DateTimePicker
android:id="@+id/dateTimePicker"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout="@layout/layout_date_picker_segmentation"
app:showLabel="true"
app:textSize="16sp"
app:themeColor="#FF8080" />
代码中
设置监听
dateTimePicker.setOnDateTimeChangedListener { millisecond -> }
更多设置
设置自定义选择器布局(注意:需要在dateTimePicker其他方法之前调用,否则其他方法将会失效)
dateTimePicker.setLayout(R.layout.layout_date_picker_segmentation)//自定义layout resId
设置显示状态
DateTimePicker支持显示 年月日时分 五个选项的任意组合,显示顺序以此为年、月、日、时、分,setDisplayType中可无序设置。
dateTimePicker.setDisplayType(intArrayOf(
DateTimeConfig.YEAR,//显示年
DateTimeConfig.MONTH,//显示月
DateTimeConfig.DAY,//显示日
DateTimeConfig.HOUR,//显示时
DateTimeConfig.MIN))//显示分
设置默认选中时间
dateTimePicker.setDefaultMillisecond(defaultMillisecond)//defaultMillisecond 为毫秒时间戳
设置允许选择的最小时间
dateTimePicker.setMinMillisecond(minMillisecond)
设置允许选择的最大时间
dateTimePicker.setMaxMillisecond(maxMillisecond)
是否显示label标签(选中栏 年月日时分汉字)
dateTimePicker.showLabel(true)
设置主题颜色
dateTimePicker.setThemeColor(ContextCompat.getColor(context,R.color.colorPrimary))
设置字体大小
设置的字体大小为选中栏的字体大小,预览字体会根据字体大小等比缩放
dateTimePicker.setTextSize(15)//单位为sp
设置标签文字
//全部
dateTimePicker.setLabelText(" Y"," M"," D"," Hr"," Min")
//指定
dateTimePicker.setLabelText(min = "M")
定制 DateTimePicker
说明
DateTimePicker
主要由至多6个 NumberPicker
组成,所以在自定义布局时,根据自己所需的样式摆放 NumberPicker
即可。以下为注意事项
开始定制
DateTimePicker
至多支持6个NumberPicker
,你可以在xml中按需摆放1-6个NumberPicker
为了让
DateTimePicker
找到NumberPicker
,需要在xml中为NumberPicker
指定id
或tag
,规则如下
/**
* year:np_datetime_year
* month:np_datetime_month
* day:np_datetime_day
* hour:np_datetime_hour
* minute:np_datetime_minute
* second:np_datetime_second
*/
android:id="@+id/np_datetime_year" or android:tag="np_datetime_year"
使用定制UI
在 CardDatePickerDialog
中使用
fun setPickerLayout(@NotNull layoutResId: Int)
在 DateTimePicker
中使用
<com.loper7.date_time_picker.DateTimePicker
android:id="@+id/dateTimePicker"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout="@layout/layout_date_picker_segmentation"
/>
或者
dateTimePicker.setLayout(R.layout.layout_date_picker_segmentation)//自定义layout resId
XML示例
示例图片
更高的拓展性
如果以上自定义并不能满足你的需求,你还可以定制你自己的 DateTimePicker
, 可参照 DateTimePicker.kt 定义你想要属性以及在代码内编写你的UI逻辑。选择器的各种逻辑约束抽离在 DateTimeController.kt ,你的 DateTimePicker
只需让 DateTimeController.kt 绑定 NumberPicker
即可。比如:
DateTimeController().bindPicker(YEAR, mYearSpinner)
.bindPicker(MONTH, mMonthSpinner)
.bindPicker(DAY, mDaySpinner).bindPicker(HOUR, mHourSpinner)
.bindPicker(MIN, mMinuteSpinner).bindPicker(SECOND, mSecondSpinner).build()
作者:LOPER7
来源:https://juejin.cn/post/6917909994985750535