热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

androidpdf夜间模式,[老实李]Android夜间模式轻松实现

效果图:yejianmoshigif.gifAndroid官方在SupportLibrary23.2.0中已经加入了夜间主题。也就是只需要通过更换主题便可实现日间模式

效果图:

4、启动 App 时检测是否处于夜间模式

如果是则切换至夜间主题。这个需要在自己项目的 Application 中实现。可在自己项目的 Application 中添加以下代码:

这里需要介绍一下有关夜间模式的几个常量值

AppCompatDelegate.setDefaultNightMode(mode), 其中 mode 有一下四个值:

MODE_NIGHT_NO: 亮色(light)主题,不使用夜间模式

MODE_NIGHT_YES:暗色(dark)主题,使用夜间模式

MODE_NIGHT_AUTO:根据当前时间自动切换 亮色( light )/暗色( dark )主题(22:00-07:00时间段内自动切换为夜间模式)

MODE_NIGHT_FOLLOW_SYSTEM(默认选项):设置为跟随系统,通常为MODE_NIGHT_NO

override fun onCreate() {

super.onCreate()

setNightMode()

}

/**

*初始化夜间模式

*/

fun setNightMode(){

val nightMode = defaultSharedPreferences.getBoolean("night", false)

if (nightMode) {

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)

}else{

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)

}

}

5、设置页面点击 switchPreference时切换白天/夜间模式

/**

* ClassName:SettingFragment

* Description:

*/

class SettingFragment : PreferenceFragment(), Preference.OnPreferenceChangeListener {

override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View {

addPreferencesFromResource(R.xml.setting)

val switchPreference = findPreference("night") as SwitchPreference

switchPreference.onPreferenceChangeListener = this

return super.onCreateView(inflater, container, savedInstanceState)

}

override fun onPreferenceChange(preference: Preference, objValue: Any): Boolean {

val key = preference.key

if ("night" == key) {

var nightMode = defaultSharedPreferences.getBoolean("night", false)

if (nightMode) {

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)

} else {

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)

}

startActivity(Intent(activity, SettingActivity::class.java))

activity.overridePendingTransition(R.anim.activity_enter_alpha,R.anim.activity_enter_alpha)

activity.finish()

}

return true

}

}

在设置界面中对SwitchPreference设置onPreferenceChangeListener,这样当夜间模式变化的时候就先启动SettingActivity,然后再将activity finish掉,中间加上渐变的过渡动画解决闪屏问题。

动画如下:

android:duration="1"

android:fromAlpha="1.0"

android:toAlpha="0.0"/>

6、解决返回主界面,主界面的UI没有更新的问题

解决这个问题可以在切换模式后从设置页面发送一个广播,然后在 MainActivity 中接收到这个广播后重启 MainActivity 即可。根据官方的推荐更换夜间模式后需要调用 recreate() 方法刷新页面。但是 recreate() 方法巨坑无比,调用 recreate() 方法引起了诸多问题。因此解决这个问题并没有在 MainActivity 调用中调用 recreate() 方法。而是在 SettingActivity 中重写了 onKeyDown() 方法。如果切换了夜间模式则在返回时发出一个广播结束掉 MainActivity ,然后调用 startActivity() 重启了 MainActivity 并添加了启动动画,让用户感觉是只是返回了主页面。

SettingActivity:

override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {

if (keyCode == KeyEvent.KEYCODE_BACK && event?.action == KeyEvent.ACTION_DOWN) {

goBack()

return true

}

return super.onKeyDown(keyCode, event)

}

fun goBack() {

EventBus.getDefault().post(NightEvent())

val intent = Intent(this, MainActivity::class.java)

startActivity(intent)

overridePendingTransition(R.anim.activity_enter_alpha, R.anim.activity_exit)

finish()

}

MainActivity(别忘了EventBus的注册和反注册):

/**

* 接收eventbus方法

*/

fun onEventMainThread(itemBean: NightEvent) {

print("mainactivityonEventMainThread")

finish()

}

大功告成~



推荐阅读
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • PDF内容编辑的两种小方法,你知道怎么操作吗?
    本文介绍了两种PDF内容编辑的方法:迅捷PDF编辑器和Adobe Acrobat DC。使用迅捷PDF编辑器,用户可以通过选择需要更改的文字内容并设置字体形式、大小和颜色来编辑PDF文件。而使用Adobe Acrobat DC,则可以通过在软件中点击编辑来编辑PDF文件。PDF文件的编辑可以帮助办公人员进行文件内容的修改和定制。 ... [详细]
  • 荣耀V8搭载基于Android 6.0的EMUI 4.1,功能介绍及用户体验
    本文介绍了荣耀V8搭载基于Android 6.0的EMUI 4.1的功能,包括色温调节、护眼模式、智灵键和学生模式等。荣耀V8在色温调节方面提供了多种选择,用户可以根据自己的喜好进行调节。护眼模式能够减少屏幕蓝光辐射,预防眼部疲劳。智灵键位于机身侧面,用户可以自定义其功能,方便快捷操作。学生模式需要密码才能开启或关闭,为家长提供了更好的控制。通过本文,读者可以了解荣耀V8的功能特点及用户体验。 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • mui框架offcanvas侧滑超出部分隐藏无法滚动如何解决
    web前端|js教程off-canvas,部分,超出web前端-js教程mui框架中off-canvas侧滑的一个缺点就是无法出现滚动条,因为它主要用途是设置类似于qq界面的那种格 ... [详细]
  • 前言:拿到一个案例,去分析:它该是做分类还是做回归,哪部分该做分类,哪部分该做回归,哪部分该做优化,它们的目标值分别是什么。再挑影响因素,哪些和分类有关的影响因素,哪些和回归有关的 ... [详细]
  • 我一直都有记录信息的习惯,不知是从什么时候开始,大约是在工作后不久。如今还真有点庆幸从那时开始记了点东西,当然是电子版的,写 ... [详细]
  • 本文详细介绍了PHP中与URL处理相关的三个函数:http_build_query、parse_str和查询字符串的解析。通过示例和语法说明,讲解了这些函数的使用方法和作用,帮助读者更好地理解和应用。 ... [详细]
  • 电脑f5键是什么作用
    常见问题f5常见问题韩亚整形医院源码,vscode写前端代码,ubuntu低配,tomcat下载路径乱码,爬虫_gscu,php精粹pdf,广州快速seo优化排名,aspwap网站 ... [详细]
  • LaTeX使用XeLaTeX入门基础(一)
    主机平台:GentooLinux11.2内核版本:LinuxKernel3.2.1编译环境:XeTeX3.1415926-2.3-0. ... [详细]
author-avatar
落墨
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有