Android界面一键变灰开发深色适配模式编程示例

目录
  • 深色主题工具类
  • background_color公用背景色
    • values/colors.xml 的代码
    • values-night/colors.xml 的代码
  • Android 界面一键变灰
    • java
    • kotlin

深色主题工具类

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会自动切换你设置好的颜色。

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添加上背景色即可:

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

效果图如下:

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界面一键变灰开发深色适配模式编程示例的详细内容,更多关于Android界面变灰深色适配模式的资料请关注我们其它相关文章!

(0)

相关推荐

  • Flutter深色模式适配的实现

    一.简介 Flutter的深色模式以及跟随系统设置比较简单,我感觉需要注意的是开发过程中尽量使用Theme中的颜色与样式,开发过程中遇到的比较大的坑就是provider的一些问题,可能是因为我用的版本新一些,网上找了很多文章,总会遇到一些问题.本文的深色模式适配是通过修改themeMode来实现的,供诸位有缘人参考. 二.环境介绍 1. Flutter: 2.0.3 2. Dart: 2.12.0 3. provider: 5.0.0 状态管理,用于运行时切换主题 4. shared_prefe

  • Android显示富文本+夜间深色模式

    目录 前言 方案一: 存在问题: 方法二: 富文本内容: 演示效果: 总结 前言 在工作中有遇到这样的需求,需要把hmtl的富文本内容,进行深色模式适配.原先的富文本内容是在直接在webview上进行展示. 解决思路:替换html中的内容色值. 方案一: 直接使用replace进行字符串替换,当时是去判断.标签,例如下代码 newText.replace("<p>", "<p><span style=\"color: rgb(51, 5

  • Flutter适配深色模式的方法(DarkMode)

    1.瞎叨叨 也不知道写点什么,本来想写写Flutter的集成测试.因为前一阵子给flutter_deer写了一套,不过感觉也没啥内容,写不了几句话就放弃了.(其实本篇内容也不多...) 那就写写最近在做的事情.没错,就是文章标题提到的适配深色模式(DarkMode),也可以说是实现夜间模式的功能.相信许多iOS的同学最近都比较关注,毕竟iOS 13上个月推送更新了. 说适配的原因是因为在iOS 13 和 Android 10系统上它都属于新特性.适配的目的是为了达到应用的主题随着系统主题模式的切

  • Android 10 适配攻略小结

    相比较去年写的Android 9适配,这次Android 10的内容有点多.没想到写了我整整两天,吐血中... 准备工作 老规矩,首先将我们项目中的 targetSdkVersion 改为 29. 1.Scoped Storage(分区存储) 说明 在Android 10之前的版本上,我们在做文件的操作时都会申请存储空间的读写权限.但是这些权限完全被滥用,造成的问题就是手机的存储空间中充斥着大量不明作用的文件,并且应用卸载后它也没有删除掉.为了解决这个问题,Android 10 中引入了 Sco

  • android开发修改状态栏背景色和图标颜色的示例

    本文介绍了android开发修改状态栏背景色和图标颜色的示例,分享给大家,具体如下: 修改状态栏背景色和图标颜色 默认是黑底白字的,现在要改为白底黑字的 先看下效果图: 1.状态栏背景是白色: 在style中设置 <item name="colorPrimaryDark">@color/white</item> 2.写修改状态栏图标的颜色(暂时只知道黑色和白色) public class StatusBarUtil { /** * 修改状态栏为全透明 * @pa

  • Android界面一键变灰开发深色适配模式编程示例

    目录 深色主题工具类 background_color公用背景色 values/colors.xml 的代码 values-night/colors.xml 的代码 Android 界面一键变灰 java kotlin 深色主题工具类 package com.example.kotlindemo.utils import android.content.Context import android.content.res.Configuration import androidx.appcomp

  • Android 界面开发颜色整理

    下图是帮助文档中的关于界面开发的推荐色值,大家可以参考一下:  补充一些常用的颜色值: <color name="white">#ffffff</color><!--白色 --> <color name="ivory">#fffff0</color><!--象牙色 --> <color name="lightyellow">#ffffe0</color>

  • Android界面效果UI开发资料汇总(附资料包)

    简介: Android界面效果UI开发资料汇总 1. Android_UI开发专题.rar 2. android界面效果全汇总.rar 对于Android平台的资源类android.content.res.Resources可能很多网友比较陌生,一起来看看SDK上是怎么介绍的吧,Contains classes for accessing application resources, such as raw asset files, colors, drawables, media or oth

  • 快速解决Android7.0下沉浸式状态栏变灰的问题

    1.绪论 现在基本上所有的应用都会去实现沉浸式状态栏,这个是应用的标配,如果你开发的应用没有,那这个吐槽点就多了,"这美工有审美观么""程序猿这么菜,沉浸式都不会?"-.. 咳咳-.. 开个玩笑啊,各有各的设计思想,不能怪程序猿. 2.问题 那么说到沉浸式状态栏的问题是什么呢?不知道大家有没有遇到过,应用在android7.0系统以下的手机上运行,沉浸式状态栏是正常的,但是在7.0以上的手机上运行就感觉没有沉浸式了,是分层的.无论怎么修改状态栏背景色都没用,看下图:

  • Android 8.0系统中通知栏的适配详解

    大家好,今天我们继续来学习Android 8.0系统的适配. 之前我们已经讲到了,Android 8.0系统最主要需要进行适配的地方有两处:应用图标和通知栏.在上一篇文章当中,我们学习了Android 8.0系统应用图标的适配,还没有看过这篇文章的朋友可以先去阅读 Android应用图标微技巧,8.0系统中应用图标的适配 . 那么本篇文章,我们自然要将重点放在通知栏上面了,学习一下Android 8.0系统的通知栏适配. 其实在8.0系统之前,还有一次通知栏变动比较大的版本,就是5.0系统.关于

  • Android 8.0系统中通知栏的适配微技巧

    大家好,今天我们继续来学习Android 8.0系统的适配. 之前我们已经讲到了,Android 8.0系统最主要需要进行适配的地方有两处:应用图标和通知栏.在上一篇文章当中,我们学习了Android 8.0系统应用图标的适配,还没有看过这篇文章的朋友可以先去阅读 Android应用图标微技巧,8.0系统中应用图标的适配 . 那么本篇文章,我们自然要将重点放在通知栏上面了,学习一下Android 8.0系统的通知栏适配. 其实在8.0系统之前,还有一次通知栏变动比较大的版本,就是5.0系统.关于

  • android实现一键锁屏和一键卸载的方法实例

    前言 本文主要介绍了关于android实现一键锁屏和一键卸载的相关内容,分享出来供大家参考学习,这两个功能也是大家在开发中会遇到的两个需求,下面话不多说了,来一起看看详细的介绍吧. 一.设备管理器操作步骤 1.创建类DeviceAdminReceiver的子类 如:com.itheima62.lockscreen.DeviceAdminSample 2.在清单文件中配置广播接收者 <receiver android:name="com.itheima62.lockscreen.Device

  • Android 代码一键实现银行卡绑定功能

    前言 今天小编给大家带来的是用代码一键实现银行卡识别与绑定功能. 银行卡识别的应用场景   介绍开发步骤前,我们先来谈谈银行卡识别的具体应用场景,银行APP.移动支付.缴费类APP.电商类APP或者其它带支付功能的APP在使用过程中往往会遇到如下常见的几个应用场景: 绑卡支付   常用于支付类APP,或者带支付功能的APP,用来绑定信用卡.银联借记卡,提供在线支付功能.转账汇款   常用于银行或者支付类APP,用来给本行或者他行用户进行转账.实名认证.身份审核   比如社交类APP,通过银行卡关

  • IOS开发之适配iOS10及Xcode8的注意点

    下面给大家介绍下iOS10的适配及Xcode8使用上的一些注意点,一起看看! 一.证书管理 用Xcode8打开工程后,比较明显的就是下图了,这个是苹果的新特性,可以帮助我们自动管理证书.建议大家勾选这个Automatically manage signing(Ps.但是在beat2版本我用的时候,完全不可以,GM版本竟然神奇的又好了.) 下面我来说说可能会出现的问题: 1.Xcode未设置开发者账号情况下的截图 解决办法是:大家在Xcode的偏好设置中,添加苹果账号,即可. 2.设备机器未添加进

  • 关于Android高德地图的简单开发实例代码(DEMO)

    废话不多说了,直接给大家上干货了. 以下为初次接触时 ,练手的DEMO import android.app.Activity; import android.app.ProgressDialog; import android.content.ContentValues; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatab

随机推荐