Android 界面一键变灰 深色主题工具类


Posted in Java/Android onApril 28, 2022

深色主题工具类

package com.example.kotlindemo.utils

import android.content.Context
import android.content.res.Configuration
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.content.edit

/**
 * author: chen
 * data: 2021/10/11
 * des: 深色主题工具类
 */
object DarkThemeUtil {

    private const val DATA_NAME = "DayNight" // 存储深色模式状态的文件名,自行更改
    /**
     * 判断是否开启了深色模式
     */
    fun isDarkTheme(context: Context): Boolean {
        val flag = context.resources.configuration.uiMode and
                Configuration.UI_MODE_NIGHT_MASK
        return flag == Configuration.UI_MODE_NIGHT_YES
    }

    /**
     * 跟随系统设置打开关闭深色主题
     */
    fun DefaultTheme() {
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
    }

    /**
     * 打开深色模式
     */
    fun openDarkTheme() {
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
    }

    /**
     * 关闭深色模式
     */
    fun closeDarkTheme() {
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
    }

    /**
     * 写入内存数据
     * 将当前的深色模式状态保持到内存,下次启动 APP 以读取
     * @param context Context
     * @param state 深色模式状态,true 打开状态,false 关闭状态
     */
    fun writeDarkThemeState(context: Context, state: Boolean) {
        context.getSharedPreferences(DATA_NAME, Context.MODE_PRIVATE)
            .edit{ putBoolean("boolean_dark_theme_state", state) }
    }

    /**
     * 读取内存数据
     */
    fun readDarkThemeState(context: Context): Boolean {
        return context.getSharedPreferences(DATA_NAME, Context.MODE_PRIVATE)
            .getBoolean("boolean_dark_theme_state", false)
    }
}

background_color公用背景色

下面我用color中的background_color公用背景色来展示,说白了就是不同模式下Android会自动切换你设置好的颜色。

Android 界面一键变灰 深色主题工具类

values/colors.xml 的代码

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#008577</color>
    <color name="colorPrimaryDark">#00574B</color>
    <color name="colorAccent">#D81B60</color>


    <color name="color_000000">#000000</color>
    <color name="color_ffffff">#ffffff</color>
    <color name="color_008adb">#008adb</color>
    <color name="light_blue_600">#FF039BE5</color>
    <color name="light_blue_900">#FF01579B</color>
    <color name="light_blue_A200">#FF40C4FF</color>
    <color name="light_blue_A400">#FF00B0FF</color>
    <color name="black_overlay">#66000000</color>

    <color name="background_color">#ffffff</color>
</resources>

values-night/colors.xml 的代码

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#111111</color>
    <color name="colorPrimaryDark">#00574B</color>
    <color name="colorAccent">#D81B60</color>


    <color name="color_000000">#000000</color>
    <color name="color_ffffff">#ffffff</color>
    <color name="color_008adb">#008adb</color>
    <color name="light_blue_600">#FF039BE5</color>
    <color name="light_blue_900">#FF01579B</color>
    <color name="light_blue_A200">#FF40C4FF</color>
    <color name="light_blue_A400">#FF00B0FF</color>
    <color name="black_overlay">#66000000</color>

    <color name="background_color">#111111</color>

</resources>

在xml添加上背景色即可:

Android 界面一键变灰 深色主题工具类

在你想要activity开启深色主题适配即可

Android 界面一键变灰 深色主题工具类

效果图如下:

Android 界面一键变灰 深色主题工具类

Android 界面一键变灰 深色主题工具类

Android 界面一键变灰

java

Paint paint = new Paint();
ColorMatrix colorMatrix= new ColorMatrix();
colorMatrix.setSaturation(0);
paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
getWindow().getDecorView().setLayerType(View.LAYER_TYPE_HARDWARE, paint);

kotlin

val paint = Paint()
val colorMatrix = ColorMatrix()
colorMatrix.setSaturation(0F)
paint.setColorFilter(ColorMatrixColorFilter(colorMatrix))
window.decorView.setLayerType(View.LAYER_TYPE_HARDWARE,paint)

 

以上就是Android界面一键变灰开发深色适配模式编程示例的详细内容!


Tags in this post...

Java/Android 相关文章推荐
Java输出Hello World完美过程解析
Jun 13 Java/Android
总结Java对象被序列化的两种方法
Jun 30 Java/Android
使用@Value值注入及配置文件组件扫描
Jul 09 Java/Android
小程序与后端Java接口交互实现HelloWorld入门
Jul 09 Java/Android
使用HttpSessionListener监听器实战
Mar 17 Java/Android
Java中Quartz高可用定时任务快速入门
Apr 03 Java/Android
Spring Boot项目传参校验的最佳实践指南
Apr 05 Java/Android
Java 异步任务计算FutureTask
Apr 28 Java/Android
Jmerte 分布式压测及分布式压测配置
Apr 30 Java/Android
Java 死锁解决方案
May 11 Java/Android
Android学习之BottomSheetDialog组件的使用
Jun 21 Java/Android
Java中的Kafka为什么性能这么快及4大核心详析
Sep 23 Java/Android
mybatis-plus模糊查询指定字段
Spring Data JPA框架Repository自定义实现
Apr 28 #Java/Android
JAVA 线程池(池化技术)的实现原理
Apr 28 #Java/Android
Spring Data JPA框架自定义Repository接口
Apr 28 #Java/Android
Spring Data JPA框架持久化存储数据到数据库
Spring Data JPA框架的核心概念和Repository接口
Java 多态分析
You might like
php缩小png图片不损失透明色的解决方法
2013/12/25 PHP
PHP获取当前日期和时间及格式化方法参数
2015/05/11 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
2015/12/21 PHP
jQuery帮助之筛选查找 children([expr])
2011/01/31 Javascript
jquery多行滚动/向左或向上滚动/响应鼠标实现思路及代码
2013/01/23 Javascript
jquery实现滑动图片自己测试的例子
2013/11/05 Javascript
JavaScript中的正则表达式简明总结
2014/04/04 Javascript
javascript去除字符串中所有标点符号和提取纯文本的正则
2014/06/07 Javascript
JS实现简单的顶部定时关闭层效果
2014/06/15 Javascript
JavaScript实现基于Cookie的存储类实例
2015/04/10 Javascript
JS基于FileSystemObject创建一个指定路径的TXT文本文件
2015/08/05 Javascript
14款经典网页图片和文字特效的jQuery插件-前端开发必备
2015/08/25 Javascript
vueJS简单的点击显示与隐藏的效果【实现代码】
2016/05/03 Javascript
JavaScript数据操作_浅谈原始值和引用值的操作本质
2016/08/23 Javascript
使用React实现轮播效果组件示例代码
2016/09/05 Javascript
JS二分查找算法详解
2017/11/01 Javascript
vue父子组件间引用之$parent、$children
2020/05/20 Javascript
windows如何把已安装的nodejs高版本降级为低版本(图文教程)
2020/12/14 NodeJs
详解Python使用simplejson模块解析JSON的方法
2016/03/24 Python
python常见的格式化输出小结
2016/12/15 Python
python文件名和文件路径操作实例
2017/09/29 Python
Python3.6基于正则实现的计算器示例【无优化简单注释版】
2018/06/14 Python
python实现对输入的密文加密
2019/03/20 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
2019/10/12 Python
Flask中sqlalchemy模块的实例用法
2020/08/02 Python
Html5剪切板功能的实现代码
2018/06/29 HTML / CSS
如何查找网页漏洞
2016/06/22 面试题
大学生入党思想汇报
2014/01/14 职场文书
道德模范先进事迹
2014/02/14 职场文书
学生干部学习的自我评价
2014/02/18 职场文书
给校长的一封建议书
2014/03/12 职场文书
教师作风整改措施思想汇报
2014/10/12 职场文书
小学生差生评语
2014/12/29 职场文书
英语辞职信怎么写
2015/02/28 职场文书
公司副总经理岗位职责
2015/04/08 职场文书
交通安全教育主题班会
2015/08/12 职场文书