Cordova Android在运行时以编程方式设置windowBackground

时间:2019-02-05 18:56:21

标签: android cordova

启动Cordova android应用后,空白屏幕会短暂可见,然后开始显示cordova-plugin-splashscreen。我了解到这是 windowBackground颜色,并且可以可以通过创建自定义styles.xml并通过活动的android:theme属性在AndroidManifest.xml中对其进行更改来进行更改。示例:

来自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引用了另一个仅包含可绘制颜色的文件。

这有效。它允许我更改启动屏幕之前显示的颜色。

但是,我现在希望允许用户(可选)更改为深色主题。我已经想出了如何根据用户偏好来修改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中。窗口背景颜色确实发生了变化,但是初始屏幕上的初始空白屏幕停留在清单中设置的任何颜色

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

Some have suggested将应用程序主题更改为透明主题,以完全防止黑屏,但这会导致打开应用程序的延迟。我对空白屏幕没问题,我只想以编程方式更改其颜色。

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

1 个答案:

答案 0 :(得分: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();

    }
}

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