安卓9开发者选项夜间模式为什么时有时无

在Android 9之后,开发者选项加入了一个夜间模式选项。当开启夜间模式后,手机的背景色会发生变化,变为黑色或者其他暗色系,以保护用户的眼睛。但是有时候,即使开启了夜间模式,某些应用还是会以白色为主题色。这是为什么呢?

原理:

Android 系统中引入了一个标准的夜间模式,这个模式并不依赖于应用程序,而是在底层通过使用背景为黑色的视图渲染整个系统的UI。应用程序则需要提供两套主题:明亮主题和深色主题。当夜间模式开启时,Android 会将系统主题从明亮主题切换到深色主题。

当应用程序使用了Android系统提供的主题时,夜间模式能自动适应该应用程序的深色主题。但是,当应用程序使用自己的主题时,就要靠开发者自己去适配夜间模式了。

详细介绍:

1. 深色主题的支持

为了支持夜间模式,应用程序需要提供两套主题:明亮主题和深色主题。在Android 9之前,主题设置是在应用程序的res/color.xml文件中设置的。我们可以通过定义颜色的方式来设置主题色,如白色或黑色等。而随着夜间模式的引入,我们需要在res/values目录下新建一个文件夹res/values-night,并在该目录下再次新建一个color.xml文件,来设定夜间模式下应用的主题色。在Android系统中,所有为资源文件设置后缀名为“-night”的文件,都会被视为夜间模式下对应的资源文件。Android会根据当前的界面风格,来使用对应的资源文件。

2. 引用系统主题

为了让应用程序在夜间模式下自适应深色主题,我们可以使用Android提供的Material Design主题。这些主题可以通过在styles.xml中使用parent属性来引用。Material Design提供了灰色和黑色两种深色主题。我们可以通过引用这些主题,来为应用程序的UI自动适配夜间模式。

3. 动态适配

有些应用程序可能采用了动态主题样式,即允许用户通过各种方式来选择主题,如更改背景色、文字颜色和字体等。这时,我们需要在运行时动态地修改主题样式,来实现夜间模式的适配。我们可以使用如下伪代码来达到该目的:

```kotlin

if(isNightMode()) {

setTheme(R.style.AppTheme_Night)

}else{

setTheme(R.style.AppTheme_Light)

}

```

4. Android 10的新特性

在Android 10中,夜间模式得到了进一步完善。系统提供了三种模式:自动、开启、关闭。当选择自动模式时,系统会根据当前时间自动切换到夜间模式。而且,Android 10引入了一个新的属性,可以通过将其设置为“yes”来使应用程序支持夜间模式:android:navigationBarColor=”#000000”或者在Activity的主题中设置:android:windowDrawsSystemBarBackgrounds=”true” 和android:statusBarColor=”@color/colorPrimaryDark”。

总结:

为了适应夜间模式,应用程序需要提供深色主题,而在适配时,我们可以引用Android提供的Material Design主题,也可以动态适配主题。我们还可以借助Android 10的新特性,将应用程序适配更加完善。


相关知识:
vulkan安卓开发
Vulkan是一种新一代的低级图形API,由Khronos Group主导开发,可以用于Android,Windows和Linux系统上的应用开发。Vulkan相较于传统的图形API(如OpenGL)具有更好的多线程性能、更强大的GPU控制能力和更高效的命
2023-05-23
qt安卓开发如何弹框
在Qt开发Android应用程序的时候,经常会遇到弹框的需求。弹框可用于显示提示信息、警告信息,或者让用户做出选择等操作。本文将介绍Qt如何在Android平台上弹出对话框。一、原理在Android平台上,弹框可以通过AlertDialog实现。Alert
2023-05-23
js安卓开发基础
JavaScript是一种用于Web开发的编程语言,它经常被用来创建交互式用户界面和动态的网站。而安卓开发则是使用Java语言开发应用程序,但是,有一些工具可以让开发者可以使用JavaScript来构建安卓应用程序。在本文中,我们将介绍如何使用JavaSc
2023-05-23
c语言能进行安卓开发
C语言是一种面向过程的、结构化的、高级程序设计语言,常被用于进行系统程序设计和物理仿真。而安卓开发则是指使用Java语言编写Android应用程序。那么,C语言和安卓开发究竟有何关系呢?本文将从原理和详细介绍两个方面进行探讨。原理在理论上,使用C语言可以进
2023-05-23
c++开发安卓程序
在过去,c++是安卓程序开发的一种主流语言,因为它对于程序员来说是一种熟悉的语言,并且在性能和速度上也很出色。然而,现在的安卓设备不再只是单个的CPU,而是多核心或超线程技术的CPU,这意味着其安全性和平稳运行的需要被更好地处理。在这篇文章中,我将向大家介
2023-05-23
2020年学安卓开发
随着移动互联网时代的到来,安卓操作系统已成为世界上最受欢迎的操作系统之一。安卓应用程序的发展迅速,许多公司都需要安卓开发工程师来开发他们自己的应用程序。在2020年,学习安卓开发是一个非常有前途的选择。安卓开发基础安卓应用程序的开发,从最基本的知识开始,包
2023-05-23
湖州安卓app定制开发
安卓APP定制开发是指根据客户的需求和规格要求,针对不同的业务需求和功能要求,设计和开发出一款具有特定功能的安卓应用程序。下面是安卓APP定制开发的详细介绍:1. 需求分析:在APP的定制开发中,首先需要进行一系列的调研和需求分析,明确客户需求和用户群体,
2023-04-28
开发一个安卓app流程
开发一个安卓应用程序(App)是一个结构化的过程,需要经历一系列阶段才能实现。此流程涉及到原理的理解和相关技术的运用。以下将详细介绍开发安卓App的流程和关键步骤:1. 概念和计划 在开始开发一个安卓App前,首先要明确App的目的和核心功能。这需要进
2023-04-28
嵌入式开发和安卓app应用
嵌入式开发和安卓app应用是两个具有不同特点和应用场景的领域,下面将对其进行介绍和比较。嵌入式开发是一种专门针对特定硬件开发的软件开发方式。嵌入式系统通常由硬件、操作系统和应用软件三部分组成,应用软件驱动硬件完成特定任务。嵌入式开发需要掌握特定的硬件架构和
2023-04-28
佳木斯app安卓开发
佳木斯APP安卓开发指的是在佳木斯这一区域范围内进行的安卓手机应用程序开发。本文将为您介绍安卓开发的原理以及一些详细的信息,使您更了解如何开发一个安卓APP。一、安卓开发原理安卓(Android)是一种基于Linux的现代移动操作系统,它支持触摸屏、键盘、
2023-04-28
vue能开发安卓app吗
Vue.js 是一个流行的 JavaScript 框架,主要用于创建前端单页面应用程序(SPA)。Vue.js 本身不是用于开发原生移动应用的框架,但是可以利用一些软件工具,如 Apache Cordova 或者 Ionic 来构建原生移动应用程序。Apa
2023-04-28
ios app和安卓app 开发语言
iOS和Android是目前市场上最流行的智能手机操作系统,它们的应用程序开发语言是不同的。iOS应用程序的开发语言是Objective-C和Swift。Objective-C是一种面向对象的编程语言,它是C语言的超集,提供了面向对象编程的特性。Swift
2023-04-28
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1