有没有办法根据应用程序主题更改初始屏幕颜色?

Posted

技术标签:

【中文标题】有没有办法根据应用程序主题更改初始屏幕颜色?【英文标题】:Is there a way to change the splash screen color based on the Apps theme? 【发布时间】:2020-06-06 00:21:31 【问题描述】:

能否以编程方式更改原生 android 初始屏幕颜色,以便可以将其设置为适合为 Flutter 应用选择的主题?

有点像当系统主题设置为深色时,WhatsApp 启动画面如何在深色主题中加载。

深色和浅色 WhatsApp 闪屏:

我猜这使用了两个主题作为启动屏幕,它们与系统主题相关联,但我不太了解如何以及是否可行。

所以问题是:是否可以在运行 Flutter 应用程序时更改启动画面的颜色/主题,以便在应用程序的下一次启动时,本机 android 启动画面会以与 Flutter 应用程序相同的主题加载?

(对不起,如果我重复了很多次,但我想尽可能好地描述我的要求)

【问题讨论】:

【参考方案1】:

在您的项目文件夹的android/app/src/main/res 中应该有一个drawable 文件夹,其中包含用于浅色主题的launch_background.xml。复制这个文件夹并调用第二个drawable-night 并配置深色主题样式。它会根据Android的系统主题自动变化。

drawable(浅色主题)文件夹中的launch_background.xml 可以这样构造,以显示具有白色背景的图像:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@android:color/white" />
    <item>
        <bitmap
            android:gravity="center"
            android:src="@drawable/launch_image" />
    </item>
</layer-list>

同样可以在drawable-night(深色主题)文件夹中的launch_background.xml 中完成,将"@android:color/white" 替换为"@android:color/black" 以获得黑色背景。

请注意,图像必须分别位于正在使用的 drawabledrawable-night 文件夹中。据我所知,格式必须是png。

我发现 this useful article 解决并解释了原生闪屏主题。

【讨论】:

我最初想仅根据应用程序的主题(独立于系统主题)更改启动画面,但看起来这是不可能的。这是下一个最好的事情。谢谢! 您介意在这里分享代码而不是参考文章吗?该链接将来可能会被删除。 完成,我添加了 xml 代码以及文章中的一些基本信息。 有什么方法可以根据用户偏好而不是系统设置来更改此设置?我是android开发的新手,所以问 Flutter 在 android 应用程序完全加载后开始绘图,因此您将无法使用 Flutter 执行此操作,您必须使用本机代码。您可能必须将用户的偏好存储在设备上,并在应用启动时读取它(并显示相应的初始屏幕)。【参考方案2】:

如果您从 Android 文件夹 xml 文件中设置启动画面,那么我猜您无法逃避编写一些本机代码并将一些主题逻辑放在 Android 子文件夹中。另一方面,如果主题逻辑和闪屏都在main.dart 文件中。然后你可以只存储你想要使用的两个不同的 splashscreens 并添加一些 if-else 语句来显示启动屏幕并保存用户主题偏好。如果您不知道如何执行此操作,可以关注此线程: How to load theme at beginning in fluttter

【讨论】:

是的,它必须是一些原生的东西,因为我想使用原生闪屏。您对如何执行此操作或我应该看哪里有任何想法?【参考方案3】:

您可以使用某种SharedPreferences 来保存主题的当前状态。然后根据您的Shared Preferences 中保存的值将所需的主题返回到MaterialApp。我个人使用HydratedBloc 包来保存我的应用程序的当前状态,包括主题。

【讨论】:

但是在任何 Flutter 代码运行之前都会显示启动画面。 嘿,flutter 应用程序在 android 加载后启动,您的答案仅说明如何在 flutter 启动后启用深色主题,不回答 og 问题

以上是关于有没有办法根据应用程序主题更改初始屏幕颜色?的主要内容,如果未能解决你的问题,请参考以下文章

更改android应用程序的基本主题颜色

android studio中的任何视图都会根据设备默认主题更改背景颜色

iPad 2 确定设备颜色

如何在 Flutter 中通过更改主题来更改文本颜色

更改状态栏色调颜色

在 Visual Studio 扩展中更改“颜色主题”