[英]Proper way to Implement Dark Theme Android Java
我正在学习如何在应用程序中实现深色主题。
从中阅读文件后,以下是我理解的要求
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
和AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
在onCheckedChanged
监听器内部根据测试,调用AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
将触发recreate()
以重新创建活动,结果它将按预期更改主题,也会出现黑色闪烁的东西。
通读后,它指出我需要在setContentView(R.layout.activity_main);
之前声明setTheme
方法。 所以它将解决黑色的东西问题。
Android 开发文档在AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
之后的OnCreate
方法中没有提到关于setTheme
的任何内容; 用来
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
能够切换欲望主题,在onCreate
方法中再次使用setTheme
有什么意义?我很困惑,花了一个多星期来解决这个问题,非常感谢指导或提示
AppCompactDelegate 有时会重新创建导致黑色闪烁的活动
检查这个它改变了没有黑色闪烁的主题
创建两个主题或使用默认的深色主题 xml,如下所示:
<!-- Dark theme -->
<style name="DarkTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/darkColorPrimary</item>
<item name="colorPrimaryDark">@color/darkColorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="fontFamily">@font/roboto</item>
<item name="listBackground">@color/darkListBackground</item>
<item name="cardBackground">@color/darkCardBackground</item>
<item name="textColor">@color/darkCardTitle</item>
<item name="actionBarBackgroundColor">@color/darkColorPrimary</item>
<item name="actionBarTextColor">@color/darkCardTitle</item>
<item name="dialogTextColor">@color/darkDialogTitle</item>
<item name="dialogDateColor">@color/dialogDateColor</item>
</style>
<!-- Light theme -->
<style name="LightTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/lightColorPrimary</item>
<item name="colorPrimaryDark">@color/lightColorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="fontFamily">@font/roboto</item>
<item name="listBackground">@color/lightListBackground</item>
<item name="cardBackground">@color/lightCardBackground</item>
<item name="textColor">@color/lightCardTitle</item>
<item name="actionBarBackgroundColor">@color/lightColorPrimary</item>
<item name="dialogTextColor">@color/lightDialogTitle</item>
<item name="dialogDateColor">@color/dialogDateColor</item>
</style>
使用共享偏好保存主题类型
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("NightMode", false);
editor.apply();
使用共享偏好在创建方法上更改 Activity 上的 App 主题
if (!darktheme) {
setTheme(R.style.DarkTheme);
} else {
setTheme(R.style.LightTheme);
}
有关简要信息,请获取该项目: https://github.com/yeshasmp/ToDo/tree/v1.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.