内容简介:妈耶,网上搜怎么实现自动切换夜间主题都没资料的,全是夜间主题的实现,只能自己想办法了。最终解决的方案倒是很简单,不过走了很多弯路。脑子不是很好使了。线索就是,应用会在任何时候启动,它该怎么确定自己是在某个时间(进入夜间或到了白天)之后第一次被启动。为了知道这个状态,就要记住上一次启动的时间,跟现在的时间比较。同时当然要有夜间模式的起始时间和结束时间。这样用四个时间来实现自动切换夜间主题。
妈耶,网上搜怎么实现自动切换夜间主题都没资料的,全是夜间主题的实现,只能自己想办法了。
最终解决的方案倒是很简单,不过走了很多弯路。脑子不是很好使了。
线索就是,应用会在任何时候启动,它该怎么确定自己是在某个时间(进入夜间或到了白天)之后第一次被启动。为了知道这个状态,就要记住上一次启动的时间,跟现在的时间比较。同时当然要有夜间模式的起始时间和结束时间。这样用四个时间来实现自动切换夜间主题。
// 现在的时间 val now = System.currentTimeMillis() // 上次启动的时间 val lastStartTime = prefs.getLong(keyLastStartTime, now) // 保存好这次的启动时间,用于下一次使用 editor.putLong(keyLastStartTime, now).apply() // 只有在自动切换打开时才进入逻辑 if (isAutoNightEnabled()) { // 获取自动切换的起始时间和结束时间 val span = getNightSpan() // 将四个毫秒值转换为Date,方便之后的比较 val lastDate = Date(lastStartTime) val nowDate = Date() val startDate = span.startTimeDate() val endDate = span.endTimeDate() // 获取现在是否是夜间模式,省去重复切换 val isNightEnabled = isNightThemeEnabled if (lastDate.before(startDate) && nowDate.after(startDate) && !isNightEnabled) { // 进入夜间 // 当且仅当,上一次启动时间是在夜间开始之前,并且现在时间是在夜间开始时候,同时夜间模式没有被打开 configureNightTheme(true) restartWithFading(intent(this, showAutoNightMsg = true)) } else if (lastDate.before(endDate) && nowDate.after(endDate) && isNightEnabled) { // 进入夜间 // 当且仅当,上一次启动时间是在白天开始之前,并且现在时间是在白天开始时候,同时夜间模式已被打开 configureNightTheme(false) restartWithFading(intent(this, showAutoNightMsg = true)) } } // 通过在Intent中放Boolean,显示一个撤销按钮 if (intent.getBooleanExtra(EXTRA_SHOW_AUTO_NIGHT_MSG, false)) { if (isNightThemeEnabled) { rootLayout.longSnackbar(R.string.auto_night_to_night_done, R.string.action_undo) { configureNightTheme(false) restartWithFading(intent(this)) } } else { rootLayout.longSnackbar(R.string.auto_night_to_day_done, R.string.action_undo) { configureNightTheme(true) restartWithFading(intent(this)) } } }
获取自动切换夜间模式时的方法,这里一定要确保秒和毫秒为0。
fun startTimeDate(): Date = Calendar.getInstance().apply { set(Calendar.HOUR_OF_DAY, startHour) set(Calendar.MINUTE, startMinute) set(Calendar.SECOND, 0) set(Calendar.MILLISECOND, 0) }.time
还有什么更好的实现方法吗?
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- HeyUI组件库 | 如何实现在线切换主题
- Flutter主题切换之flutter redux
- 技巧:根据主题模式 (dark/light) 切换 favicon
- Pear Admin Ant 1.1.0.Release 正式发布,新增布局切换、主题切换、工作空间
- swift4 App切换主题的实现方法总结
- 基于Angular 8和Bootstrap 4实现动态主题切换
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Design and Analysis of Distributed Algorithms (Wiley Series on P
Nicola Santoro / Wiley-Interscience / 2006-10-27 / USD 140.95
This text is based on a simple and fully reactive computational model that allows for intuitive comprehension and logical designs. The principles and techniques presented can be applied to any distrib......一起来看看 《Design and Analysis of Distributed Algorithms (Wiley Series on P》 这本书的介绍吧!