Coder Social home page Coder Social logo

loper7 / datetimepicker Goto Github PK

View Code? Open in Web Editor NEW
1.0K 1.0K 118.0 31.19 MB

⭐🎉一个高颜值日期时间选择器;极简API,内置弹窗,支持农历日期显示,适配深色模式,可动态配置样式及主题,选择器支持完全自定义UI。

Kotlin 100.00%
datepicker datepicker-dialog datetime-picker datetimepicker kotlin kotlin-library timepicker timepickerdialog ui-design

datetimepicker's Introduction

Hi there 👋

Anurag's github stats

datetimepicker's People

Contributors

loper7 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

datetimepicker's Issues

关于setMaxMillisecond的Bug

设备:Pixel4
系统版本:Android12

场景:Demo中的CardDatePickerDialog
Max Value: 2022-01-06 15:47:47
Min Value: 1990-09-10 15:48:01
Def Value: 2000-12-22 15:48:10

点击Show Dialog

默认时间将显示在2000年1月1日15时0分10秒


经过观察发现只要Def value的Month或者Day > Max Value的Month或者Day,显示便会出错

找不到kotlin.jvm.functions.Function1的类文件

大神,我在使用CardDatePickerDialog 的时候遇到一个问题,Build时,提示我找不到kotlin.jvm.functions.Function1的类文件,我检查了配置应该没问题,我不知道是哪里导致的这个错误,还请大神指点一下,具体问题如下,感谢🙏

报错:

错误: 无法访问Function1
.setOnChoose("确定", aLong -> {
^
找不到kotlin.jvm.functions.Function1的类文件

代码:

        new CardDatePickerDialog.Builder(this)
            .setTitle("SET MAX DATE")
            .setOnChoose("确定", aLong -> {

                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyMMddHHmmss", Locale.getDefault()); 
                String time = simpleDateFormat.format(aLong);

                //aLong = millisecond
            }).build().show();

我的配置:

Module 的build.gradle

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.android.material:material:1.2.1'
implementation 'org.jetbrains:annotations-java5:15.0'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation 'com.orhanobut:logger:2.2.0'
implementation 'pub.devrel:easypermissions:2.0.0'
implementation 'com.githang:status-bar-compat:0.7'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.cardview:cardview:1.0.0'
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
implementation 'com.github.loperSeven:DateTimePicker:0.3.3'//具体版本请看顶部jitpack标识,如0.3.4,仅支持androidx
api project(path: ':wiseKit')
}

configurations {
cleanedAnnotations
compile.exclude group: 'org.jetbrains' , module:'annotations'
}

Project 的build.gradle:

allprojects {
repositories {
google()
jcenter()
maven { url "https://jitpack.io" }
}
}

设置最小时间有BUG

setMinMillisecond(TimeUtils.string2Millis("1901 01 01 01:01:01", "yyyy MM dd HH:mm:ss")) //设置最小时间
当我设置1900年,最小时间是1800,但是当我设置2000年,最小时间却又是正确的。

一个小的需求建议

很好用的库,感谢!提一个小需求:

能否自定义时间间隔?比如以10分钟为单位去选择时间,分钟的滚轮则显示:00/10/20/30/40/50

切换时区后,选中日期后,时间戳异常

/**DateTimeController
* 日期发生变化
*/
private fun onDateTimeChanged() {
syncDateData()
Log.d("DateTimePicker","$mYear-$mMonth-$mDay $mHour:$mMinute:$mSecond")

    millisecond = if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
        LocalDateTime.of(mYear, mMonth, mDay, mHour, mMinute, mSecond)
            .toInstant(ZoneOffset.ofHours(8)).toEpochMilli()
    } else {
        val mCalendar = Calendar.getInstance()
        mCalendar.set(mYear, mMonth-1, mDay, mHour, mMinute, mSecond)
        mCalendar.timeInMillis
    }

    if (mOnDateTimeChangedListener != null) {
        mOnDateTimeChangedListener?.invoke(millisecond)
    }
}

millisecond = if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
LocalDateTime.of(mYear, mMonth, mDay, mHour, mMinute, mSecond)
.toInstant(ZoneOffset.ofHours(8)).toEpochMilli()
} 为什么有这一段

有些设备会显示一条竖线

有些设备上选择日期,年月日之间会显示一条竖线,有些就在月和日之间显示竖线,有些没有显示,这是为什么呢?有什么办法可以隐藏竖线吗?

我是java的0.3.0在setOnChoose时没有找到CardDatePickerDialog.OnChooseListener()

我是java的0.3.0在setOnChoose时没有找到CardDatePickerDialog.OnChooseListener()
然后您给的例子里面是这些 我看不懂
/**
*示例
*setOnChoose("确定")
*setOnChoose{millisecond->}
*setOnChoose("确定"){millisecond->}
*/
fun setOnChoose(text: String = "确定", listener: ((Long) -> Unit)? = null)

所以一直无法setOnChoose,
.setOnChoose("选择",)
这里第二个参数用java是怎么写的?

感谢

无法设置默认时间

如果是自己获取默认时间戳,显示的默认时间是错的。
比如:

val calendar = Calendar.getInstance().apply {
            add(Calendar.MONTH, -2)
}

calendar.timeInMillis

当设置了最大时间时,默认时间却不是当前时间前2个月的时间。不设置最大时间,显示就是正常的。

内存泄漏

CardDatePickerDialog.builder(activity)
                    .setMaxTime(System.currentTimeMillis())
                    .showBackNow(false)
                    .setDisplayType(
                        mutableListOf(
                            DateTimeConfig.YEAR,
                            DateTimeConfig.MONTH
                        )
                    )
                    .setThemeColor(Color.parseColor("#03A9F4"))
                    .setLabelText(year = "", month = "")
                    .setOnChoose { millisecond ->
                        mAnalyzeViewModel.queryDateLiveData.value = millisecond
                    }
                    .build()
                    .show()

弹窗关闭后,使用leakCanary检测到内存泄漏

`setDefaultTime`默认时间显示错误

            /**
             * `setDefaultTime` 显示错误
             * 正确的应该为12:30:00, 但是默认显示的是12:50:00
             *
             * 复现条件:
             * 1. setDefaultTime 和 setMinTime 同时大于当前时间
             * 2. setDefaultTime - setMinTime 小于一小时
             */
            CardDatePickerDialog.builder(this)
                .setTitle("Error Time")
                .setDisplayType(DateTimeConfig.HOUR, DateTimeConfig.MIN, DateTimeConfig.SECOND)
                .setBackGroundModel(CardDatePickerDialog.CARD)
                .showBackNow(false)
                .setWrapSelectorWheel(false)
                .showFocusDateInfo(false)
                // 1640925000000 = UTC+8 2021-12-31 12:30:00.000
                .setDefaultTime(1640925000000)
                // 1640922000000 = UTC+8 2021-12-31 11:20:00.000
                .setMinTime(1640922000000)
                .build().show()

只显示固定月份

大佬,我现在有个需求。只显示10月1日到3月31日。其他的月份不要,每年都是这样。这个应该改哪块呢

做的很漂亮,感谢

能否加这个 月日(周)-时-分 格式
月日(周)这里今天显示今天,明天显示明天,其余按标准格式显示

时间显示问题

在三星手机上选择时间,月份总是小一月,在华为手机上测试,月份显示正常

感谢楼主的开源,选择器样式很漂亮,功能也很棒,支持很多自定义UI,现在有个小BUG反馈一下

设置时间选择只选择年份和月份,然后最大值为当前时间戳2021.01.09...,
然后滑动滚轮至2020.12,然后再滑动滚轮到2021年(月份不选择,显示的默认为1月),
然后点击确定后,回调时间为2021年12月

代码:

val displayList = mutableListOf()
displayList.add(DateTimeConfig.YEAR)
displayList.add(DateTimeConfig.MONTH)
val model = CardDatePickerDialog.STACK
val maxDate = TimeUtils.getNowMills()
CardDatePickerDialog.builder(this)
.setTitle("日期选择")
.setDisplayType(displayList)
.setBackGroundModel(model)
.showBackNow(false)
.setMaxTime(maxDate)
.setWrapSelectorWheel(false)
.setThemeColor(Color.parseColor("#4169E1"))
.showDateLabel(true)
.showFocusDateInfo(false)
.setOnChoose("选择") {
tvTimeSelect.text = StringUtils.conversionTime(it, "yyyy-MM")
}
.setOnCancel("关闭") {
}.build().show()

建议发布版本时把接口注释加上

使用的版本是:implementation 'com.github.loperSeven:DateTimePicker:0.4.1'
在AS里面的鼠标放到接口上都没有API接口注释,点进源码也是没有注释,建议发布版本时把接口注释加上。

請求

Hello,
這插件不錯,簡潔易懂
有一些建議,希望能實現

  1. 自訂文字,多語言支援
  2. Title可以設定為無,能不佔空間

謝謝

修改滚动样式

感谢作者开源的库,非常好用和自定义,但是遇到一个问题,可以修改滚动的样式跟Android自带的NumberPicker一样的滚动样式吗?上下一起滚动

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.