是否可以通过编程方式更改原生android闪屏颜色,以便可以将其设置为适合为Flutter应用程序选择的主题?
有点像当系统主题设置为深色时WhatsApp启动屏幕如何加载深色主题。
深色和浅色WhatsApp闪屏:
我猜这使用了两个与系统主题相关联的闪屏主题,但我不知道这是如何以及是否可能的。
所以问题是:是否可以在运行flutter应用程序时更改闪屏的颜色/主题,以便在应用程序的下一次启动时,原生android闪屏加载与Flutter应用程序相同的主题?
(如果我重复了很多,对不起,但我想尽可能好地描述我的问题)
在你的项目文件夹的android/app/src/main/res
中应该有一个可绘制
文件夹,其中包含用于浅色主题的launch_background. xml
。复制此文件夹并调用第二个可绘制-夜间
并配置深色主题样式。它将根据Android的系统主题自动更改。
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>
同样的事情也可以在launch_background. xml
中的绘图-night
(深色主题)文件夹中完成,将"@android:颜色/白色"
替换为"@android:颜色/黑色"作为黑色背景。
请注意,图像必须位于分别使用的可绘制
和可绘制夜
文件夹中。据我所知,格式必须是png。
我发现了这篇有用的文章,它解决并解释了本机闪屏主题。
如果你从Android文件夹xml文件中设置闪屏,那么我猜你无法逃避编写一些Native代码并将一些主题逻辑放在Android子文件夹中。另一方面,如果主题逻辑和闪屏都在main. dart
文件中。那么你可以只存储你想要使用的两个不同的闪屏并添加一些if-else语句来显示闪屏并保存用户主题偏好。如果你不知道如何做到这一点,你可以按照这个线程:如何在fluttter中开始加载主题
您可以使用某种SharedPre的
来保存主题的当前状态。然后根据保存在您的共享首选项
中的值将所需的主题返回到MaterialApp
。我个人使用HydratedBloc
包来保存我的应用程序的当前状态,包括主题。