1

Android:这是一个让你心动的日期&时间选择组件

 2 years ago
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.
neoserver,ios ssh client

添加 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 指定 idtag,规则如下
/**
 * 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+次版本,每一次的更新的都使他更加稳定与完善。
在此代表他,向给他starissue的小伙伴们致以诚挚的感谢,每一个starissue都是他成长动力和足迹。
看到这里的你,可以移驾 Github 为他点亮右上角的star吗?

助你调教官方 Tablayout – Tablayout 拓展


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK