layout: post
title: Android深色主题背景的实现及主题背景颜色互换
date: 2-12-03 21:52:38 发布
author: ‘zhangtao’
header-img: ‘img/post-bg-2015.jpg’
catalog: false
tags:
-android
-android studio
-ide
目录
深色主题背景的优势:
如何实现Android的深色主题模式:
控制App内深色模式的自由切换:
深色主题背景的优势:
1.减少耗电量
2.提高深夜中的可视性
Android 10及更高版本中提供深色主题背景。
可以通过以下方法启用深色主题背景:
- 使用系统设置启用深色主题背景。
- 在 Pixel 设备上,选择“省电模式”将同时启用深色主题背景。
应用在 Android 10 (API 级别 29) 及更高版本上运行时,推荐的选项有所不同,目的是允许用户替换系统默认设置:
- 浅色
- 深色
- 系统默认
如何实现Android的深色主题模式:
1.创建一个Empty Activity
2. 若没有style.xml,则按照该路径创建了一个res/values/styles.xml:
- 在style.xml中添加将应用的主题背景设置为继承DayNight主题背景:
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
或使用MaterialComponent 的深色主题背景:
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
4.在main中加入:
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:forceDarkAllowed="true">
</LinearLayout>
5.在主题中加入:
<style name="AppTheme.NoActionBar">
<item name="android:forceDarkAllowed">true</item>
</style>
6.最终能达成的效果:
如要检查当前采用的是哪种主题背景,应用可以运行如下代码:
int currentNightMode = configuration.uiMode & Configuration.UI_MODE_NIGHT_MASK;
switch (currentNightMode) {
case Configuration.UI_MODE_NIGHT_NO:
break;
case Configuration.UI_MODE_NIGHT_YES:
break;
}
控制App内深色模式的自由切换:
AppCompatDelegate里包含这么几种: MODE_NIGHT_NO: 使用亮色主题,不使用夜间模式 MODE_NIGHT_YES:使用暗色主题,使用夜间模式 MODE_NIGHT_AUTO:根据当前时间自动切换 亮色/暗色主题 MODE_NIGHT_FOLLOW_SYSTEM(默认选项):设置为跟随系统,通常为 MODE_NIGHT_NO
可以使用Android Studio自带的方法setDefaultNightMode():
AppCompatDelegate.setDefaultNightMode()
注意:setDefaultNightMode()对整个系统生效。
另一个方法:
setLocalNightMode()可以对单独页面生效。
但只能由getDelegate().setLocalNightMode()调用。
洪伟棋
原文链接:https://blog.csdn.net/m0_58773350/article/details/128149967?spm=1001.2014.3001.5501