问题标签 [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.

0 投票
1 回答
420 浏览

android - setDefaultNightMode() 仅在 PreferenceFragment 中的第二次调用后有效

我正在努力在我的应用程序中实现暗模式。现在我尝试使用PreferenceFragment嵌套在AppCompatActivity. 该应用程序的行为是这样的,从作为默认值的浅色主题开始:

  • 如果我在 ListPreference 中选择“深色”,则首选项的摘要会更改,但 UI 在此活动和所有其他活动中保持浅色。
  • 如果我第二次选择“深色”,活动将切换到深色主题,以及后台堆栈中的其他活动。
  • 当我想切换回浅色主题时,反过来也会发生同样的事情。

所以基本上一切正常,但您必须在 ListPreference 中选择所需的值两次。ListPreference 的代码:

到目前为止我尝试了什么:

  • 声明getActivity.recreate()前调用return true;
  • 在短暂getActivity.recreate()延迟后使用Handler
  • 当布尔值为 true时调用父 Activitythis.recreate()的方法onResume()changedDesignSetting

我感谢进一步的帮助。

0 投票
1 回答
1395 浏览

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有关

我希望您能找到解决方案或至少找到解决方法,例如从特定配置的资源中获取颜色(如果可能)。

0 投票
2 回答
177 浏览

java - 第一次执行夜间模式代码,会触发当前重启

第一次执行夜间模式代码时,它会重新启动 Activity

第二次,代码将正常工作并对程序进行更改

我使用了以下代码:

这是我的 Styles.xml:

用我试过的主题Theme.MaterialComponents.DayNight.NoActionBar,但还是一样

0 投票
0 回答
965 浏览

android - 在暗模式(夜间模式)切换期间丢失 Android 自定义区域设置

我们的应用程序要求我们能够根据用户选择更改语言,而不仅仅是依赖于设备区域设置。这意味着我们必须实现一种方法,以便我们在用户做出此选择时包装上下文并在每个 Activity 中注入指定的语言。

这在过去对我们来说效果很好,但现在我们已经实现了暗模式,我们注意到切换暗模式会在使用 appcompat 1.1.0 时将语言重置为设备的语言设置。我们希望能够从 1.0.2 升级我们项目的 appcompat 版本,以便我们可以使用MODE_NIGHT_FOLLOW_SYSTEM在该版本中被破坏但在1.1.0-alpha03中标记为已修复的暗模式。

我已经针对这个问题提出了一个错误,但我想知道是否有人找到了一种解决方法,可以让我们使用最新的 appcompat 并允许在暗模式下使用自定义语言。这是一个演示此问题的项目

0 投票
1 回答
3183 浏览

android - Android - 自定义通知的暗模式

我有一个带有自定义 XML 布局的通知,因此我不能使用默认样式,如 MessagingStyle 或 MediaStyle。

问题是,即使开启了暗模式,通知也会保持白色,这很烦人。

我检查了 MessagingStyle 和 MediaStyle 的源代码,似乎暗模式背景颜色是由状态栏本身设置的,使用这些样式时,它们无法从通知对象本身中提取(即使使用反射也不行)

是否有可能以某种方式检索背景颜色?

我认为对颜色进行硬编码不是一个好习惯,在不同的智能手机上可能会有所不同......

编辑:即使设置正确的颜色也无济于事......通知在锁屏中很亮,在通知栏中很暗......

0 投票
2 回答
869 浏览

android - Android设置夜间模式更改资源语言

这是一种难以描述的效果。

我们的 Android 应用支持两种语言,但我们不使用系统语言,而是让用户在设置中进行设置。然后,在附加应用程序的 BaseContext 之前,我们设置语言环境配置。

这样,attachBaseContext 调用会获得一个上下文,该上下文的语言环境设置为例如“de”而不是“en”——即使设备是英文的。

到目前为止,这很有效,并且根据设置,来自上下文的所有资源都使用该语言。然而,我们现在为夜间模式添加了另一个设置(即让用户可以选择将“主题”设置为“正常”或“暗模式”)。

出于这个原因,这个想法是设置这样的东西

在 Application 的 onCreate() 中(我们也在 Activity 中尝试过)。

但是,这样做时,资源(至少有一些)突然加载了设备区域设置。菜单条目采用设备语言。但是,检查 Locale.getLanguage() 给了我配置的语言和动态调用的字符串(例如 context.getString(R.string.xyz))也以正确配置的语言显示。

这导致假设菜单资源在某种程度上(重新)加载(再次)但不尊重来自 JVM 的设置区域设置。

有谁知道如何找到那个错误?我们在这里缺少什么?菜单资源是否以不同方式加载?

0 投票
3 回答
1932 浏览

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。

为什么它不工作?或任何其他方式来做到这一点?

0 投票
0 回答
582 浏览

android - 如何实现启动画面的夜间模式?

我设法为我的应用添加了夜间模式。它适用于除启动画面外的整个应用程序。启动画面使用操作系统夜间模式设置。我的应用程序级别更改不适用于初始屏幕。有什么办法可以在启动画面中处理夜间模式?

风格:

@drawable/标志:

颜色.xml(夜晚)

颜色.xml

我尝试在夜间文件夹中使用样式,在夜间文件夹中使用颜色,在夜间文件夹中使用图层列表,但没有任何效果

0 投票
1 回答
3362 浏览

android - Android 在主题为暗时更改品牌启动背景颜色

我在我的应用程序中实现了深色主题。一切正常,当系统处于暗模式时,应用程序处于暗模式,反之亦然。

问题是 Branded Launch。我有 2 个可绘制文件:

黑暗的:

和光:

为了使用品牌发布,我添加了这个:

在我的AndroidManifest.xml

这样做很明显,当暗模式处于活动状态时,我无法设置暗品牌启动。我应该怎么办?

0 投票
1 回答
482 浏览

java - 日/夜模式在初始启动时不起作用

这里很奇怪的问题。我带着它兜圈子!

日/夜模式似乎在我的应用程序中运行良好......但INVISIBLE仅适用于可绘制对象,它不适用于初始加载。

我有 2 个 xml 可绘制文件夹: drawabledrawable-night具有匹配的 .png 文件名

我有两个值文件夹: valueswith colors.xml, styles.xml, ic_launcher_background.xmland strings.xml- and also - values-nightwith colors.xmlandstyles.xml

在应用程序中,我使用切换开关为日/夜模式设置模式,如下所示。这似乎工作正常。

上面代码调用的InitApplication类是:

我也有Activity_Poker活动。一切正常,如果我更改开关,应用程序就会更改。

我也有一个启动活动Activity_Splash,并在onCreate我检查模式:

启动工作正常。当我关闭应用程序并重新启动时,两种模式的背景颜色等都是正确的。我VISIBLE在活动中始终有 3 个可绘制对象。这些在两种替代模式之间也可以很好地改变。

但是,我有 9 个默认情况下不可见的可绘制对象。这些在创建时变为可见,但它们总是在每次加载时显示 DAY_MODE

注意: drawable不在错误的文件夹中。正确的颜色位于正确的文件夹中。9 个不工作的 .png 文件的颜色与VISIBLE工作正常的 3 个可绘制对象相匹配。只是默认INVISIBLE的不是从drawables-night文件夹中填充的onCreate

如果我使用 inApp 用户菜单重新启动 Activity,则使用适用的NIGHT_MODEDAY_MODE可绘制对象正确重新创建 Activity。但是 NIGHT_MODE 可绘制对象(默认情况下是不可见的)永远不会在启动时使用。

预期结果:在启动时,不可见的 ImageView 更改为可见并填充drawables为 forDAY_MODEdrawables-nightfor NIGHT_MODE

实际结果:在启动时,不可见的 ImageView 更改为可见并填充drawables为 forDAY_MODEdrawablesfor NIGHT_MODE

Activity_Poker.java

注意: cardType上面正确显示了 Logcat 中的 == 5。

设置UI.java

活动扑克.xml