问题标签 [android-night-mode]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - setDefaultNightMode() 仅在 PreferenceFragment 中的第二次调用后有效
我正在努力在我的应用程序中实现暗模式。现在我尝试使用PreferenceFragment
嵌套在AppCompatActivity
. 该应用程序的行为是这样的,从作为默认值的浅色主题开始:
- 如果我在 ListPreference 中选择“深色”,则首选项的摘要会更改,但 UI 在此活动和所有其他活动中保持浅色。
- 如果我第二次选择“深色”,活动将切换到深色主题,以及后台堆栈中的其他活动。
- 当我想切换回浅色主题时,反过来也会发生同样的事情。
所以基本上一切正常,但您必须在 ListPreference 中选择所需的值两次。ListPreference 的代码:
到目前为止我尝试了什么:
- 声明
getActivity.recreate()
前调用return true;
- 在短暂
getActivity.recreate()
延迟后使用Handler
- 当布尔值为 true时调用父 Activity
this.recreate()
的方法onResume()
changedDesignSetting
我感谢进一步的帮助。
java - ContextCompat.getColor 方法忽略夜间模式
我正在为我的 Android 应用程序开发夜间模式。我正在使用 ContextCompat.getColor 以编程方式获取某些 UI 元素的颜色,但是这种方法没有获取正确的颜色。当应用程序处于夜间模式时,为了遵守夜间资源限定符,ContextCompat 从 values/colors.xml 中获取颜色,而不是从 values-night/colors.xml 中获取颜色。
奇怪的是,如果我从 Activity 调用 ContextCompat.getColor,它会返回正确的颜色
相反,如果我从 Activity 中的 Fragment 调用 ContextCompat.getColor,它会返回错误的颜色
我正在使用 'androidx.appcompat:appcompat:1.0.2' 库
不知道是不是和这个bug有关
我希望您能找到解决方案或至少找到解决方法,例如从特定配置的资源中获取颜色(如果可能)。
java - 第一次执行夜间模式代码,会触发当前重启
第一次执行夜间模式代码时,它会重新启动 Activity
第二次,代码将正常工作并对程序进行更改
我使用了以下代码:
这是我的 Styles.xml:
用我试过的主题Theme.MaterialComponents.DayNight.NoActionBar
,但还是一样
android - 在暗模式(夜间模式)切换期间丢失 Android 自定义区域设置
我们的应用程序要求我们能够根据用户选择更改语言,而不仅仅是依赖于设备区域设置。这意味着我们必须实现一种方法,以便我们在用户做出此选择时包装上下文并在每个 Activity 中注入指定的语言。
这在过去对我们来说效果很好,但现在我们已经实现了暗模式,我们注意到切换暗模式会在使用 appcompat 1.1.0 时将语言重置为设备的语言设置。我们希望能够从 1.0.2 升级我们项目的 appcompat 版本,以便我们可以使用MODE_NIGHT_FOLLOW_SYSTEM
在该版本中被破坏但在1.1.0-alpha03中标记为已修复的暗模式。
我已经针对这个问题提出了一个错误,但我想知道是否有人找到了一种解决方法,可以让我们使用最新的 appcompat 并允许在暗模式下使用自定义语言。这是一个演示此问题的项目。
android - Android - 自定义通知的暗模式
我有一个带有自定义 XML 布局的通知,因此我不能使用默认样式,如 MessagingStyle 或 MediaStyle。
问题是,即使开启了暗模式,通知也会保持白色,这很烦人。
我检查了 MessagingStyle 和 MediaStyle 的源代码,似乎暗模式背景颜色是由状态栏本身设置的,使用这些样式时,它们无法从通知对象本身中提取(即使使用反射也不行)
是否有可能以某种方式检索背景颜色?
我认为对颜色进行硬编码不是一个好习惯,在不同的智能手机上可能会有所不同......
编辑:即使设置正确的颜色也无济于事......通知在锁屏中很亮,在通知栏中很暗......
android - Android设置夜间模式更改资源语言
这是一种难以描述的效果。
我们的 Android 应用支持两种语言,但我们不使用系统语言,而是让用户在设置中进行设置。然后,在附加应用程序的 BaseContext 之前,我们设置语言环境配置。
这样,attachBaseContext 调用会获得一个上下文,该上下文的语言环境设置为例如“de”而不是“en”——即使设备是英文的。
到目前为止,这很有效,并且根据设置,来自上下文的所有资源都使用该语言。然而,我们现在为夜间模式添加了另一个设置(即让用户可以选择将“主题”设置为“正常”或“暗模式”)。
出于这个原因,这个想法是设置这样的东西
在 Application 的 onCreate() 中(我们也在 Activity 中尝试过)。
但是,这样做时,资源(至少有一些)突然加载了设备区域设置。菜单条目采用设备语言。但是,检查 Locale.getLanguage() 给了我配置的语言和动态调用的字符串(例如 context.getString(R.string.xyz))也以正确配置的语言显示。
这导致假设菜单资源在某种程度上(重新)加载(再次)但不尊重来自 JVM 的设置区域设置。
有谁知道如何找到那个错误?我们在这里缺少什么?菜单资源是否以不同方式加载?
android - 夜间模式颜色不适用于回收站视图背景
我想为我的 android 应用程序实现夜间模式,所以我使用 Theme.AppCompat.DayNight 主题来实现夜间模式。但是我必须在夜间模式下自定义工具栏和回收站视图的颜色。
为此,我在 attrs.xml 文件中声明了该属性,并将该属性用作 recyclerview 中的背景。
这是 attrs.xml 文件
这是回收站视图
现在对于样式,我已经为夜间模式声明了 styles.xml 和 styles.xml(夜间)。
这是styles.xml
这是styles.xml(晚上)
在styles.xml 文件中,我为recyclerview 背景定义了红色,在夜间模式文件中定义了黄色。
上面的行存在于夜间模式的活动文件中。
但是每次回收站视图颜色都是红色,即来自styles.xml
为什么styles.xml(夜间)颜色不适用于recyclerview。
为什么它不工作?或任何其他方式来做到这一点?
android - 如何实现启动画面的夜间模式?
我设法为我的应用添加了夜间模式。它适用于除启动画面外的整个应用程序。启动画面使用操作系统夜间模式设置。我的应用程序级别更改不适用于初始屏幕。有什么办法可以在启动画面中处理夜间模式?
风格:
@drawable/标志:
颜色.xml(夜晚)
颜色.xml
我尝试在夜间文件夹中使用样式,在夜间文件夹中使用颜色,在夜间文件夹中使用图层列表,但没有任何效果
android - Android 在主题为暗时更改品牌启动背景颜色
我在我的应用程序中实现了深色主题。一切正常,当系统处于暗模式时,应用程序处于暗模式,反之亦然。
问题是 Branded Launch。我有 2 个可绘制文件:
黑暗的:
和光:
为了使用品牌发布,我添加了这个:
在我的AndroidManifest.xml
这样做很明显,当暗模式处于活动状态时,我无法设置暗品牌启动。我应该怎么办?
java - 日/夜模式在初始启动时不起作用
这里很奇怪的问题。我带着它兜圈子!
日/夜模式似乎在我的应用程序中运行良好......但INVISIBLE
仅适用于可绘制对象,它不适用于初始加载。
我有 2 个 xml 可绘制文件夹:
drawable
并drawable-night
具有匹配的 .png 文件名
我有两个值文件夹:
values
with colors.xml
, styles.xml
, ic_launcher_background.xml
and strings.xml
- and also -
values-night
with colors.xml
andstyles.xml
在应用程序中,我使用切换开关为日/夜模式设置模式,如下所示。这似乎工作正常。
上面代码调用的InitApplication
类是:
我也有Activity_Poker
活动。一切正常,如果我更改开关,应用程序就会更改。
我也有一个启动活动Activity_Splash
,并在onCreate
我检查模式:
启动工作正常。当我关闭应用程序并重新启动时,两种模式的背景颜色等都是正确的。我VISIBLE
在活动中始终有 3 个可绘制对象。这些在两种替代模式之间也可以很好地改变。
但是,我有 9 个默认情况下不可见的可绘制对象。这些在创建时变为可见,但它们总是在每次加载时显示 DAY_MODE 。
注意: drawable不在错误的文件夹中。正确的颜色位于正确的文件夹中。9 个不工作的 .png 文件的颜色与VISIBLE
工作正常的 3 个可绘制对象相匹配。只是默认INVISIBLE
的不是从drawables-night
文件夹中填充的onCreate
。
如果我使用 inApp 用户菜单重新启动 Activity,则使用适用的NIGHT_MODE
或DAY_MODE
可绘制对象正确重新创建 Activity。但是 NIGHT_MODE 可绘制对象(默认情况下是不可见的)永远不会在启动时使用。
预期结果:在启动时,不可见的 ImageView 更改为可见并填充drawables
为 forDAY_MODE
或drawables-night
for NIGHT_MODE
。
实际结果:在启动时,不可见的 ImageView 更改为可见并填充drawables
为 forDAY_MODE
或drawables
for NIGHT_MODE
。
Activity_Poker.java
注意: cardType
上面正确显示了 Logcat 中的 == 5。
设置UI.java
活动扑克.xml