日夜间模式切换

Android设置夜间模式的主题样式 阅读详情

  日夜间模式切换两种方式

第一种

创建values-night与drawable-night文件夹,将values中的colors.xml与strings.xml文件copy到values-night中,

切换日夜间模式中,系统自己会寻找文件,切换的夜间时,就会自动使用drawable-night,values-night中的设置


原values中color.xml的内容

原values中strings.xml的内容


values-night中color.xml的内容


values-night中strings.xml的内容


原values中styles.xml的内容,其中继承类发生变化,继承的是:Theme.AppCompat.DayNight.DarkActionBarT:

drawable与drawable-night中存放图片,如果你想要切换日夜间模式,图片也相应变化,就必须将相对应的图片名字起成相同的名字。


一切设置好之后需在布局xml文件中引用,假如你想在切换日夜间模式时,文字字体颜色发生变化,就将textColor引用你已经定义好的colors.xml的main_textView


定义一个MyApplication类继承Application类

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        if (getSharedPreferences("theme", MODE_PRIVATE).getBoolean("night_theme", false)) {
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
        }

    }
}
MainActivity类

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btnChangeTheme = (Button) findViewById(R.id.btnChangeTheme);

        btnChangeTheme.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //切换日夜间模式
                int uiMode;
                uiMode = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
                switch (uiMode) {
                    case Configuration.UI_MODE_NIGHT_YES:
                        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
                        getSharedPreferences("theme", MODE_PRIVATE).edit().putBoolean("night_theme", false).commit();
                        break;
                    case Configuration.UI_MODE_NIGHT_NO:
                        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
                        getSharedPreferences("theme", MODE_PRIVATE).edit().putBoolean("night_theme", true).commit();
                        break;
                }
                //重建
                recreate();
            }
        });
    }

第二种

在values包下创一个attrs.xml,其中内容为:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <attr name="textColorValue" format="color"></attr>
    <attr name="textContent" format="string"></attr>
</resources>
在values下的strings.xml中新加两个字段:夜间模式与日间模式

<resources>
    <string name="app_name">ChangeThemeTwo</string>
    <string name="change_to_night">夜间模式</string>
    <string name="change_to_day">日间模式</string>
</resources>
在values下的styles.xml中的更改

<resources>

    <!-- Base application theme. 日间模式-->
    <style name="day_theme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:windowBackground">@color/white</item>

        <!--日间模式对应的字体颜色 和日间模式对应的文本内容-->
        <item name="textColorValue">@color/black</item>
        <item name="textContent">@string/change_to_night</item>
    </style>
    
    <!-- Base application theme. 夜间模式-->
    <style name="night_theme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/black</item>
        <item name="colorPrimaryDark">@color/dark_bg</item>
        <item name="colorAccent">@color/dark_bg1</item>
        <item name="android:windowBackground">@color/black</item>

        <!--夜间模式对应的字体颜色 和夜间模式对应的文本内容-->
        <item name="textColorValue">@color/white</item>
        <item name="textContent">@string/change_to_day</item>
    </style>

</resources>
在AndroidManifest.xml清单文件中有所更改,theme中需更改为使用day_theme日间模式

在自己布局文件xml中,引用方式如下:


创建一个ThemeUtil类

public class ThemeUtil {
    //我当前应用的主题
    private static int theme = 0;

    //日间模式主题
    private static final int DAY_THEME = 0;

    //夜间模式主题
    private static final int NIGHT_THEME = 1;
    public static void onActivityCreateSetTheme(Activity activity){
        switch (theme){
            case DAY_THEME:
                activity.setTheme(R.style.day_theme);
                break;
            case NIGHT_THEME:
                activity.setTheme(R.style.night_theme);
                break;
        }
    }
    //点击按钮改变对应得主题
    public static void ChangeCurrentTheme(Activity activity) {

        //1、改变当前主题的theme变量
        switch (theme) {
            case DAY_THEME:
                theme = NIGHT_THEME;
                break;
            case NIGHT_THEME:
                theme = DAY_THEME;
                break;
        }

        //2、重启这个activity
        activity.finish();
        //为了切换没换,设置了动画效果
       activity.overridePendingTransition(R.anim.sliding_in, R.anim.sliding_out);
        activity.startActivity(new Intent(activity, activity.getClass()));
    }
}

在res下创建anim存放动画布局

sliding_in中的内容

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="0.0"
    android:toAlpha="1.0"
    android:duration="1000">

</alpha>
sliding_out中的内容

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="1.0"
    android:toAlpha="0.0"
    android:duration="1000">

</alpha>

MainActivity类

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //设置对应的主题 ,在ui创建好之后设置主题无效,所以要放到setContentView()方法前面setTheme()
        ThemeUtil.onActivityCreateSetTheme(MainActivity.this);
        setContentView(R.layout.activity_main);
        Button btnChangeTheme = (Button) findViewById(R.id.btnChangeTheme);
        btnChangeTheme.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //切换日夜间模式
                ThemeUtil.ChangeCurrentTheme(MainActivity.this);
            }
        });
    }
}

Android 深色模式使用失效 阅读详情

相关推荐

一招切换日/夜间模式:Pixso 2.0变量系统实现主题切换设计实战

如上图对比表所示,相比于传统的手动切换页面风格、修改颜色样式,Pixso变量系统不仅可以快速解决视觉风格切换,还从根本上解决了样式不统一、维护成本高的问题。如果你还没有上手,不妨试着从“日/夜间模式切换”这个场景开始练手,真正感受变量在实战中的作用。

l1m0_的博客 955

Android Studio 新版本的 values和values-night目录下内容说明

Android Studio目录下的values和values-night目录的说明

adminstate的博客 1918

android 深色主题背景适配原理剖析

最。近有个需求,就是APP要适配深色主题,于是乎就查阅相关资料。当然第一手资料就是官网 参考链接 官方资料:深色主题背景 和 官方demo 本文就是在官网资料基础上进行了学习总结,以备不时之需。 ...

菜鸟博客 705

夜间模式 values-night

import android.app.Activity; import android.content.SharedPreferences; import android.content.res.Configuration; import android.preference.PreferenceManager;import java.lang.ref.WeakReference;/** * Ni

tuhuolong的专栏 3759

安卓换肤主题更换夜间模式相关-android修改控件外观使用drawable资源.rar

android修改控件外观(使用drawable资源.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

安卓夜间模式开发【深色主题适配】

1.创建文件夹 就在res 下新建 values-night目录,创建对应的colors.xml文件。如果适配图片的话,就创建对应的 drawable-night目录。  正常情况下,系统会调用values里面的颜色还有主题等信息,当切换到深色模式的时候,系统就会调用“-night”的文件夹里面的信息,所以当你需要深色模式的图片时,对应就需要创建“mipmap-xxhdpi-night”等等 2.主题设置 在values和values-night里面把你的主题设置为继承“Theme.AppCompat.DayNight”或者是它的子类“Theme.AppCompat.DayNight.NoA

android日夜间模式的切换:

大家好 我是 菠萝派 目前我知道的有三种 日夜间模式的切换方式: 1.设置setTheme 主题用来切换 2.设置asl(Android Support Library)中的 UiMode来支持日间/夜间模式的切换 3.通过资源id的映射 回调自定义ThemeChangeListener接口来处理日间页间模式的切换 今天就介绍一下第一种方式: 效果 step1: 在values...

Spider_007 1565

[ENVI]-[高光谱遥感]-波谱沙漏分析工具的使用

图1-2-1查看特殊波段的坏波段图1-2-2在中添加坏波段ENVI波谱沙漏分析工具MNF变换。

m0_57992372的博客 1469

Android实现日夜间模式切换

对于阅读类的App来说,没有夜间模式,

corerzhang的专栏 3187

Outlook日历同步全攻略:Win10+安卓+iOS三端无缝衔接(附常见问题解决)

本文提供了一份详尽的Outlook日历同步指南,帮助用户在Windows 10、安卓和iOS三端实现无缝衔接。文章深入解析了Exchange ActiveSync等核心同步原理,并给出了从账户创建到各设备(特别是华为手机)的具体配置步骤、进阶管理技巧以及针对同步失败、事件重复等常见问题的实战解决方案,旨在彻底解决跨平台日程管理的痛点。

l3m4n的博客 551

睿思综述智能体:100篇高质量文献一键生成万字长文,还能联网PubMed,科研效率拉满!

对一个主题进行文献综述,是日常科研人绕不过去的工作,无论是写论文前言,综述论文,或者基金申请书的立项依据,需要根据主题,从海量文献中提取相关信息,梳理出清晰的逻辑线,再组织成流畅的文字。4 一键生成万字全文:大纲确认后,它会基于对所有论文的深度理解,逐个章节进行详细撰写,最终生成一篇逻辑连贯、内容翔实、引用规范的万字综述长文,并直接保存为Word(.docx)文件。3 智能撰写大纲:你可以提供自己的大纲,也可以让它根据所有文献内容,智能生成一个逻辑清晰的综述大纲,并支持你在此基础上修改。

dinaxuejie的博客 820

简单实现日夜间模式切换

在values下的color中设置一个颜色 color name="bg_select">#fffcolor>//为日间模式时的颜色 新建一个values-night文件夹将values中的color复制到此文件夹下 color name="bg_select">#000color>//改变夜间模式时需要的颜色 //将夜间模式需要改变颜色的地方背景颜色设置为bg_select

duanzeshan的博客 1444

AXI 1G/2.5G Ethernet Subsystem IP核使用过程中参数配置全解

AXI 1G/2.5G Ethernet Subsystem 是一个为FPGA设计的以太网子系统,它支持1Gbps和2.5Gbps的数据传输速率,使得FPGA能够直接进行高速以太网通信。这个子系统通常包含以太网MAC控制器、GMII(千兆媒体独立接口)或RGMII(简化GMII)接口、以及可选的PHY(物理层)接口支持。

u011565038的博客 1万+

Android最简单实现日夜间模式切换

如果你用的是Android studio开发,则先把Android工程切换为Project,在你的项目下的res目录下创建一个values-night文件夹,并在这个文件夹下创建colors.xml文件,代码如下 <color name="colorPrimary">#3F51B5</color> <color name="colorPrimaryDark">#303F9F</colo

王志伟的博客 5442

SAP 物料主数据 Forecasting 视图,别把预测只当成一个数字字段

摘要(150字): SAP S/4HANA物料主数据的Forecasting视图常被忽视,但对依赖历史消耗规律的物料至关重要。该功能基于工厂维度的历史消耗数据,结合预测参数自动计算未来需求,动态调整重订货点和安全库存。预测模板(Forecast Profile)能标准化参数设置,而消耗数据(Consumption Values)的质量直接影响预测结果。预测值作为MRP输入,需注意保存操作才能生效。自动重订货点功能通过分析消耗波动和服务水平,实现库存策略的动态优化。Individual Forecast功能则

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1432

# YOLOv11-seg改进系列 | 引入CVPR MetaFormer的C3k2_PoolingFormerCGLU模块,池化Token混合+CGLU门控MLP

本文引入 CVPR 2022 论文(MetaFormer/PoolFormer)提出的 MetaFormer 元架构设计,以Pooling Token 混合器 + ConvolutionalGLU(CGLU)MLP构成,将其封装为,用于替换 YOLOv11-seg 的 C3k2 块。对比维度C3k2(基线)C3k2_PoolingFormerCGLU(本文)参数量(n scale)2.46M≈2.49M9.6≈9.69.7(+1.0%)架构范式单阶段卷积MetaFormer 双阶段。

qq_44224801的博客 843

Android高级日夜切换,Android APP日夜间模式切换

说在前面日夜间模式在app上面的体验不必多说,特别是晚上,所以这玩意儿是个好东西,民间版本的夜间模式实现效果都很友好,但是都很复杂。官方在Android Support Library 23.2开始支持了夜间模式切换,所以大家伙儿不妨试试?上效果实践1.关于gradle依赖就不多说了,新建项目就会依赖compile'com.android.support:appcompat-v7:24.2.1'...

weixin_28993425的博客 1216

第七天 Labview进阶(7.3 Teststand简单使用)

TestStand是NI开发的自动化测试管理软件,支持多语言编程和硬件集成,广泛应用于电子产品和工业测试。安装时需注意版本选择,2022版支持离线安装。使用步骤包括:1)创建测试序列文件;2)插入测试动作并配置参数(如选择VI路径、设置变量);3)添加条件判断和延时控制;4)执行测试序列时具备流程控制功能,如失败步骤自动跳过后续测试。该软件能有效提升测试效率与准确性,通过可视化操作实现复杂测试流程管理。

weixin_38637405的博客 1728

探索夜色:Android日夜间模式切换库——NightOwl

探索夜色:Android日夜间模式切换库——NightOwl 在移动应用开发中,提供一个可随环境变化的日夜间主题切换功能已经成为一种趋势。NightOwl是一个实验性的Android项目,专注于帮助开发者轻松实现这一特性。只需几行代码,你的应用就能拥有优雅的日夜切换效果。 项目介绍 NightOwl的核心在于其简洁的API设计和高效的运行机制。它为Android应用程序提供了动态切换日间和夜间模...

gitblog_00063的博客 875

QGis二次开发 —— 5、基于qgis开发多种在线地图预览,并加入经纬度坐标显示等(附:源码)

QGis二次开发 —— 5、基于qgis开发多种在线地图预览,并加入经纬度坐标显示等(附:源码

368

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Flutter日夜间模式切换组件推荐

Flutter日夜间模式切换组件推荐 本文将为您介绍一个优秀的开源项目——Flutter日夜间模式切换组件(Day Night Switch)。该项目采用Dart语言开发,适用于Flutter应用程序。 1. 项目基础介绍 项目名称:Day Night Switch 编程语言:Dart 该项目是一个Flutter组件,用于在应用程序中添加一个日夜间模式切换功能。用户可以通过一个简单的切换按钮在日间...

gitblog_00464的博客 516

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

日夜间模式的切换

首先日夜间模式分为三种。      以下展示的为第一种比较简单的方式。     1.在我们的styles下重新添加一套夜间模式的颜色     resources xmlns:tools="http://schemas.android.com/tools"> //这里是系统默认提供的白天模式 style name="AppTheme" parent="Th

m0_37756225的博客 665

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android APP日夜间模式切换

说在前面 日夜间模式在app上面的体验不必多说,特别是晚上,所以这玩意儿是个好东西,民间版本的夜间模式实现效果都很友好,但是都很复杂。官方在Android Support Library 23.2开始支持了夜间模式切换,所以大家伙儿不妨试试? 上代码 DayNightDemo 上效果 实践 1.关于gradle依赖就不多说了,新建项目就会依赖 compi

qq_23174861的博客 1600
上一篇: 自定义View,绘制一个圆形,并可以单击拖动
下一篇: android中汉字转为拼音
SuperMonsterH
博客等级 码龄9年 11粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuperMonsterH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值