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方法重载和方法重写的区别到底在哪?
Jun 11 Java/Android
Java实现斗地主之洗牌发牌
Jun 14 Java/Android
每日六道java新手入门面试题,通往自由的道路
Jun 30 Java/Android
springboot临时文件存储目录配置方式
Jul 01 Java/Android
关于Spring配置文件加载方式变化引发的异常详解
Jan 18 Java/Android
Android超详细讲解组件ScrollView的使用
Mar 31 Java/Android
Android Flutter实现3D动画效果示例详解
Apr 07 Java/Android
Java实现带图形界面的聊天程序
Jun 10 Java/Android
springboot读取resources下文件的方式详解
Jun 21 Java/Android
springboot+rabbitmq实现智能家居实例详解
Jul 23 Java/Android
SpringBoot Http远程调用的方法
Aug 14 Java/Android
Spring boot实现上传文件到本地服务器
Aug 14 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中有关合并某一字段键值相同的数组合并的改进
2015/03/10 PHP
php可变长参数处理函数详解
2017/02/22 PHP
php 查找数组元素提高效率的方法详解
2017/05/05 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
smarty模板的使用方法实例分析
2019/09/18 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
Prototype使用指南之hash.js
2007/01/10 Javascript
能说明你的Javascript技术很烂的五个原因分析
2011/10/28 Javascript
分享一个用Mootools写的鼠标滑过进度条改变进度值的实现代码
2011/12/12 Javascript
浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法
2014/01/10 Javascript
js控制table合并具体实现
2014/02/20 Javascript
jQuery 和 CSS 的文本特效插件集锦
2014/12/12 Javascript
JavaScript实现快速排序的方法
2015/07/31 Javascript
详解JavaScript对象类型
2016/06/16 Javascript
jQuery文字提示与图片提示效果实现方法
2016/07/04 Javascript
vue2.0+webpack环境的构造过程
2016/11/08 Javascript
学习 NodeJS 第八天:Socket 通讯实例
2016/12/21 NodeJs
原生js实现焦点轮播图效果
2017/01/12 Javascript
原生js的ajax和解决跨域的jsonp(实例讲解)
2017/10/16 Javascript
express+vue+mongodb+session 实现注册登录功能
2018/12/06 Javascript
layui加载表格,绑定新增,编辑删除,查看按钮事件的例子
2019/09/06 Javascript
微信小程序登陆注册功能的实现代码
2019/12/10 Javascript
[01:08:00]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python 文件和输入输出小结
2013/10/09 Python
python获取局域网占带宽最大3个ip的方法
2015/07/09 Python
通过Python来使用七牛云存储的方法详解
2015/08/07 Python
Python使用SQLite和Excel操作进行数据分析
2018/01/20 Python
python tensorflow学习之识别单张图片的实现的示例
2018/02/09 Python
Python 元组拆包示例(Tuple Unpacking)
2019/12/24 Python
Expedia挪威官网:酒店、机票和租车
2018/03/03 全球购物
西班牙美妆电商:Perfume’s Club(有中文站)
2018/08/08 全球购物
英国票务网站:Ticketmaster英国
2018/08/27 全球购物
第二层交换机和路由器的区别?第三层交换机和路由器的区别?
2013/05/23 面试题
安踏广告词改编版
2014/03/21 职场文书
二手房购房意向书范本
2014/04/01 职场文书
三方合作意向书范本
2015/05/09 职场文书