Android:这是一个让你心动的日期&时间选择组件
source link: http://www.androidchina.net/12062.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
添加 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
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()
关于 Date&Time Picker
他是去年疫情肆虐的时候诞生的,从编写他的第一行代码开始到现在已经快过了一年,到目前为止更新了10+次版本,每一次的更新的都使他更加稳定与完善。
在此代表他,向给他star
和issue
的小伙伴们致以诚挚的感谢,每一个star
和issue
都是他成长动力和足迹。
看到这里的你,可以移驾 Github 为他点亮右上角的star
吗?
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK