Android 夜间模式主题风格切换

2024-02-09 20:58

本文主要是介绍Android 夜间模式主题风格切换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 跟进源码

1.1 String.xml

Settings 模块

    <string name="night_display_title" msgid="2626451512200357686">"夜间模式"</string><string name="night_display_text" msgid="1837277457033025056">"夜间模式会将您的屏幕色调调节为琥珀色,让您在光线昏暗的环境下可以更舒适地查看屏幕或阅读文字,并可能有助于您入睡。"</string><string name="night_display_category_schedule" msgid="2044072617637348966">"排定时间"</string><string name="night_display_category_status" msgid="1952928783124400330">"状态"</string><string name="night_display_auto_mode_title" msgid="8046314360381608455">"自动开启"</string><string name="night_display_auto_mode_never" msgid="6723636142053240947">"永不"</string><string name="night_display_auto_mode_custom" msgid="6012300346981608242">"自定义时间安排"</string><string name="night_display_auto_mode_twilight" msgid="2123345097508167094">"日落到日出"</string><string name="night_display_start_time_title" msgid="8918016772613689584">"开始时间"</string><string name="night_display_end_time_title" msgid="8286061578083519350">"结束时间"</string><string name="night_display_summary_off" msgid="7009821232380000786">"关闭。<xliff:g id="ID_1">%1$s</xliff:g>"</string><string name="night_display_summary_off_auto_mode_never" msgid="2305501561697289620">"一律不自动开启。"</string><string name="night_display_summary_off_auto_mode_custom" msgid="1548073080728058384">"将在<xliff:g id="ID_1">%1$s</xliff:g>自动开启。"</string><string name="night_display_summary_off_auto_mode_twilight" msgid="2737328390752018845">"将在日落时自动开启。"</string><string name="night_display_summary_on" msgid="6626224414971753417">"开启。<xliff:g id="ID_1">%1$s</xliff:g>"</string><string name="night_display_summary_on_auto_mode_never" msgid="5217396859715040056">"一律不自动关闭。"</string><string name="night_display_summary_on_auto_mode_custom" msgid="887702685252504739">"将在<xliff:g id="ID_1">%1$s</xliff:g>自动关闭。"</string><string name="night_display_summary_on_auto_mode_twilight" msgid="8574989770628425398">"将在日出时自动关闭。"</string>

1.2 布局文件

Settings 模块 display_settings.xml,设置入口

        <com.android.settings.display.NightDisplayPreferenceandroid:key="night_display"android:title="@string/night_display_title"android:fragment="com.android.settings.display.NightDisplaySettings"android:widgetLayout="@null"settings:keywords="@string/keywords_display_night_display" /><!-- Hide night mode for now<ListPreferenceandroid:key="night_mode"android:title="@string/night_mode_title"settings:keywords="@string/keywords_display_night_mode"android:summary="@string/night_mode_summary"android:entries="@array/night_mode_entries"android:entryValues="@array/night_mode_values" /> -->

1.3 逻辑控制

UiModeManager.setNightMode(value);进行夜间模式和白天模式的切换

package com.android.settings;public class DisplaySettings extends SettingsPreferenceFragment implementsPreference.OnPreferenceChangeListener, Indexable {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);final Activity activity = getActivity();final ContentResolver resolver = activity.getContentResolver();addPreferencesFromResource(R.xml.display_settings);mNightModePreference = (ListPreference) findPreference(KEY_NIGHT_MODE);if (mNightModePreference != null) {final UiModeManager uiManager = (UiModeManager) getSystemService(Context.UI_MODE_SERVICE);final int currentNightMode = uiManager.getNightMode();mNightModePreference.setValue(String.valueOf(currentNightMode));mNightModePreference.setOnPreferenceChangeListener(this);}...import android.app.UiModeManager;if (preference == mNightModePreference) {try {final int value = Integer.parseInt((String) objValue);final UiModeManager uiManager = (UiModeManager) getSystemService(Context.UI_MODE_SERVICE);uiManager.setNightMode(value);} catch (NumberFormatException e) {Log.e(TAG, "could not persist night mode setting", e);}}

2.Demo

1.原理

调用UiModeManager夜间模式接口 + value-night资源文件

2.实现逻辑
public class MainActivity extends Activity {//实现Android白天/夜间模式的关键类private UiModeManager mUiModeManager = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mUiModeManager = (UiModeManager) getSystemService(Context.UI_MODE_SERVICE);}public void night(View view) {mUiModeManager.setNightMode(UiModeManager.MODE_NIGHT_YES);}public void day(View view) {mUiModeManager.setNightMode(UiModeManager.MODE_NIGHT_NO);}
3.布局文件
    <Button
        android:onClick="night"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="夜间模式" /><Button
        android:onClick="day"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="白天模式" />
4.夜间模式和白天模式的资源文件

values-night

<?xml version="1.0" encoding="utf-8"?>
<resources><color name="colorPrimary">#3B5125</color><color name="colorPrimaryDark">#30E333</color><color name="colorAccent">#FF4081</color><color name="mybackground">#000000</color>
</resources>
5.运行结果

DAY

NIGHT

这篇关于Android 夜间模式主题风格切换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/695270

相关文章

MybatisPlus 多数据源切换@DS注解失效问题解决

《MybatisPlus多数据源切换@DS注解失效问题解决》在业务开发中使用到了多数据源,遇到了@DS注解失效问题,有两个场景使用到同一个@DS的查询方法,下面就来介绍一下该问题的解决,感兴趣的可以... 在业务开发中使用到了多数据源,遇到了@DS注解失效问题,有两个场景使用到同一个@DS的查询方法,一个正

python版本切换工具pyenv的安装及用法

《python版本切换工具pyenv的安装及用法》Pyenv是管理Python版本的最佳工具之一,特别适合开发者和需要切换多个Python版本的用户,:本文主要介绍python版本切换工具pyen... 目录Pyenv 是什么?安装 Pyenv(MACOS)使用 Homebrew:配置 shell(zsh

idea设置快捷键风格方式

《idea设置快捷键风格方式》在IntelliJIDEA中设置快捷键风格,打开IDEA,进入设置页面,选择Keymap,从Keymaps下拉列表中选择或复制想要的快捷键风格,点击Apply和OK即可使... 目录idea设www.chinasem.cn置快捷键风格按照以下步骤进行总结idea设置快捷键pyth

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求

python项目环境切换的几种实现方式

《python项目环境切换的几种实现方式》本文主要介绍了python项目环境切换的几种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 如何在不同python项目中,安装不同的依赖2. 如何切换到不同项目的工作空间3.创建项目

Go语言实现桥接模式

《Go语言实现桥接模式》桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立地变化,本文就来介绍一下了Go语言实现桥接模式,感兴趣的可以了解一下... 目录简介核心概念为什么使用桥接模式?应用场景案例分析步骤一:定义实现接口步骤二:创建具体实现类步骤三:定义抽象类步骤四:创建扩展抽象类步

2025最新版Android Studio安装及组件配置教程(SDK、JDK、Gradle)

《2025最新版AndroidStudio安装及组件配置教程(SDK、JDK、Gradle)》:本文主要介绍2025最新版AndroidStudio安装及组件配置(SDK、JDK、Gradle... 目录原生 android 简介Android Studio必备组件一、Android Studio安装二、A

C++中的解释器模式实例详解

《C++中的解释器模式实例详解》这篇文章总结了C++标准库中的算法分类,还介绍了sort和stable_sort的区别,以及remove和erase的结合使用,结合实例代码给大家介绍的非常详细,感兴趣... 目录1、非修改序列算法1.1 find 和 find_if1.2 count 和 count_if1

Redis中群集三种模式的实现

《Redis中群集三种模式的实现》Redis群集有三种模式,分别是主从同步/复制、哨兵模式、Cluster,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1. Redis三种模式概述2、Redis 主从复制2.1 主从复制的作用2.2 主从复制流程2

深入理解MySQL流模式

《深入理解MySQL流模式》MySQL的Binlog流模式是一种实时读取二进制日志的技术,允许下游系统几乎无延迟地获取数据库变更事件,适用于需要极低延迟复制的场景,感兴趣的可以了解一下... 目录核心概念一句话总结1. 背景知识:什么是 Binlog?2. 传统方式 vs. 流模式传统文件方式 (非流式)流