无法使用values-night在我的应用程序中禁用夜间模式

12

问题在于,当我在软件上预览时一切都很好,但是当我在手机上运行应用程序时,无论是drawables还是背景,所有地方使用的白色都变成了暗色。我没有在drawables中使用alpha,只有 android:color="@color/white"

问题的根源是我的手机开启了夜间模式,因此它自动更改了应用程序中的颜色。

为了尝试禁用夜间模式,我创建了一个名为values-night的文件夹,并复制了我的@styles和@colors以匹配白天和晚上模式。

styles.xml(night)

<resources>

    <!-- Base application theme. -->
        <style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="android:windowBackground">@color/colorAccent</item>
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>

颜色.xml(夜间)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#1d1d1d</color>
    <color name="colorPrimaryDark">#1d1d1d</color>
    <color name="colorAccent">#F8F8F8</color>
    <color name="textColor">#1d1d1d</color>
</resources>

在我的MainActivity.xml文件中

<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:background="@color/colorAccent"
    android:theme="@style/MyTheme"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

在我的Manifest.xml文件中

 android:theme="@style/MyTheme"

我查看了如何在我的应用程序中禁用夜间模式,即使android 9.0(Pie)启用了夜间模式?Android 9.0中的深色主题会使我的应用程序布局变得丑陋并进行了values-night文件夹,但仍未解决该问题。

但问题仍然存在,这里有什么遗漏?先谢谢。

5个回答

20

我在我的小米Redmi Note 7上遇到了同样的问题。我尝试将以下代码放在MainActivity.create()中:

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);

但是在一些小米设备上无法正常工作,包括我的设备,尽管它可以在其他手机上工作。

所以我发现的唯一解决方案是在styles.xml中的每个AppTheme中添加<item name="android:forceDarkAllowed" tools:targetApi="q">false</item>,如下所示:

<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:forceDarkAllowed" tools:targetApi="q">false</item>
</style>

这对于我的手机来说很好用。


1
这个问题只在红米手机上出现,但在我的情况下,我只需将其添加到主题中,它就能完美运行。谢谢 <item name="android:forceDarkAllowed" tools:targetApi="q">false</item> </style> - Anwar Zahid
应用程序主题没有改变,但是每当设备主题被更改时,活动仍然会重新启动。有什么建议可以防止这种情况发生吗? - Samudra Ganguly

3

步骤1: 从您的值文件夹中删除themes(night).xml

步骤2: 将您应用程序样式在themes.xml中的parent属性更改为

<style name="Theme.AppName" parent="Theme.MaterialComponents.DayNight.NoActionBar">

to

<style name="Theme.AppName" parent="Theme.MaterialComponents.Light.NoActionBar">

注意从“DayNight”更改为“Light”

现在,即使您的手机设置为深色模式,由于没有夜间值存在并且您正在继承您选择的任何Material Theme的浅色版本,您的应用程序主题应保持不变。

这是对我有效的方法。如果这对您也有效,请告诉我。


但它无法阻止主题更改后重新启动活动。我希望我的应用程序完全免疫主题更改。有什么建议吗? - Samudra Ganguly

3

只需删除themes.xml(night) xml文件或将Theme.AppCompat.Light.NoActionBar添加到themes.xml(night) xml文件中。


-1

1. 只需从主题(Light)中复制您的主要颜色,并将其替换为夜间主题的主要颜色。

更改此内容

style name="Theme.FakeWhatsApp" parent="Theme.MaterialComponents.DayNight.NoActionBar"

转换成这个

style name="Theme.FakeWhatsApp" parent="Theme.MaterialComponents.Light.NoActionBar"

-1

只需删除themes-night文件,就可以了,这对我有效


1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接