Cordova Android 在运行时以编程方式设置窗口背景色

4
当Cordova Android应用程序启动时,cordova-plugin-splashscreen插件之前会短暂地显示一个空白屏幕。我了解到这是windowBackground颜色,可以通过创建自定义styles.xml并在AndroidManifest.xml中引用该文件来更改它,通过设置activity的android:theme属性。示例:
从AndroidManifest.xml中:
<activity android:configChanges="orientation|keyboard|keyboardHidden|screenLayout|screenSize" android:label="@string/activity_name" android:launchMode="singleTask" android:name="MainActivity" android:screenOrientation="portrait" android:theme="@style/CustomStyle" android:windowSoftInputMode="adjustPan">

从 styles.xml 文件中

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="CustomStyle" parent="@android:style/Theme.Material.Light.NoActionBar">
        <item name="android:windowBackground">@drawable/init_splash</item>
    </style>
</resources>

styles.xml 引用了另一个只包含 drawable 颜色的文件。

这样做是有效的。它允许我更改在启动画面之前出现的颜色。

然而,我现在想要让用户可选择切换到暗色主题。我已经找到了如何修改 cordova-plugin-splashscreen 以根据用户偏好更改启动画面的方法,但我在运行时编程方式更改 windowBackground/theme时遇到了问题。

我尝试在 MainActivity.java 或 CordovaActivity.java 中添加以下内容:

setTheme(R.style.CustomDarkStyle);

getWindow().setBackgroundDrawableResource(getResources().getIdentifier("init_splash_dark", "drawable", getPackageName()));

getWindow().setBackgroundDrawable(new ColorDrawable(Color.BLACK));

在super.onCreate()或setContentView()之前,我将它们放置在onCreate中。窗口背景颜色确实会改变,但在闪屏之前的初始空白屏幕仍然保持清单中设置的颜色。

如何在应用程序启动时通过编程方式更改活动/窗口的背景颜色?

有些人建议将应用程序主题更改为透明主题以完全避免空白屏幕,但这会导致打开应用程序的延迟。我可以接受空白屏幕,我只想通过编程方式更改其颜色。

截至4月22日,我尚未找到解决此问题的方法。

1个回答

0
创建一个与您的项目同名的类,并将其扩展为Application而不是Activity。将此代码放入此类中,因为它将在应用程序启动时自动初始化。它将作为应用程序的构造函数。 希望这可以帮助您!
我有一个名为“slot”的项目,所以我创建了一个名为“slot”的类,就像这样。
package com.xyz.slot;

import android.app.Application;

public class slot extends Application {
    @Override
    public void onCreate() {
        setTheme(R.style.CustomDarkStyle);
        super.onCreate();

    }
}

但是请确保在清单中没有设置主题,否则它将不会被覆盖。


我已在MyAppName.java中放置了以下版本。即使我导入com.packagename.MyAppName.R,我仍然收到错误消息:包R不存在。我尝试使用以下语句:getApplicationContext()。setTheme(getResources()。getIdentifier(“AppDarkStyle”,“style”,getPackageName()))。编辑:这没有任何作用。 我还尝试从清单中删除android:theme,但无济于事。 - Terren
@Terren 你能否分享一些你的代码片段,包括你的清单文件? - Vanshaj Daga
@Terren 看了你的代码后,我只能说在清单文件中将主题从活动中移除,并将你的 App 类重构为“小写字母”。 - Vanshaj Daga
让我们在聊天中继续这个讨论 - Terren

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