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

相关文章

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

python编写朋克风格的天气查询程序

《python编写朋克风格的天气查询程序》这篇文章主要为大家详细介绍了一个基于Python的桌面应用程序,使用了tkinter库来创建图形用户界面并通过requests库调用Open-MeteoAPI... 目录工具介绍工具使用说明python脚本内容如何运行脚本工具介绍这个天气查询工具是一个基于 Pyt

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

RabbitMQ工作模式中的RPC通信模式详解

《RabbitMQ工作模式中的RPC通信模式详解》在RabbitMQ中,RPC模式通过消息队列实现远程调用功能,这篇文章给大家介绍RabbitMQ工作模式之RPC通信模式,感兴趣的朋友一起看看吧... 目录RPC通信模式概述工作流程代码案例引入依赖常量类编写客户端代码编写服务端代码RPC通信模式概述在R

SpringBoot实现多环境配置文件切换

《SpringBoot实现多环境配置文件切换》这篇文章主要为大家详细介绍了如何使用SpringBoot实现多环境配置文件切换功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 示例代码结构2. pom文件3. application文件4. application-dev文

SQL Server身份验证模式步骤和示例代码

《SQLServer身份验证模式步骤和示例代码》SQLServer是一个广泛使用的关系数据库管理系统,通常使用两种身份验证模式:Windows身份验证和SQLServer身份验证,本文将详细介绍身份... 目录身份验证方式的概念更改身份验证方式的步骤方法一:使用SQL Server Management S

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

Redis高可用-主从复制、哨兵模式与集群模式详解

《Redis高可用-主从复制、哨兵模式与集群模式详解》:本文主要介绍Redis高可用-主从复制、哨兵模式与集群模式的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录Redis高可用-主从复制、哨兵模式与集群模式概要一、主从复制(Master-Slave Repli