首页 > 解决方案 > 在 Android 上,状态栏和导航栏在启动画面显示时仍然可见。如何摆脱它?

问题描述

这是 Apache Cordova 的一个奇怪问题。我已经设置了一个要为 Android 打包的应用程序。从 Android 4.4 开始,就有了沉浸式模式。所以当我添加:

<preference name="Fullscreen" value="true" />

config.xml并启动应用程序,我可以看到状态栏从屏幕移到顶部,而导航栏从屏幕移到底部 - 正如预期的那样。

一旦我使用 Cordova 的启动画面插件,使用:

cordova plugin add cordova-plugin-splashscreen

并向 config.xml 添加启动画面,如下所示:

<splash src="res/screen/android/splashScreen.png" />
<plugin name="cordova-plugin-splashscreen" spec="^5.0.2" />

事情有点不同。

在启动画面可见期间,屏幕如下所示:

显示启动画面的屏幕截图

如您所见,导航和状态栏仍然可见。好吧,只要闪屏消失,我就可以看到状态/导航栏移出屏幕 - 因此看起来现在它正在切换到沉浸式模式。不幸的是,这弄乱了应用程序的布局。看起来实际的应用程序现在位于状态栏和导航栏所在的区域之间。因此,我在顶部和底部有黑色边框,而不是全屏。这看起来有点像这样:

应用程序截图

显然 Android 返回错误的屏幕尺寸,因为状态和导航栏仍然存在。一旦闪屏出现在屏幕上,如何强制 Cordova 切换到沉浸式模式?

标签: androidapachecordovafullscreensplash-screen

解决方案


问题:cordova 是否使用了 Android 原生的样式和 Manifest(很确定是这样)?如果是这样,您可以:

在您的活动中使用全屏主题/样式。

在您的styles.xml 上:

<style name="Theme.AppCompat.Light.NoActionBar.FullScreen" parent="@style/Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

然后在 Manifest 中使用它。

<activity android:name=".ActivityName"
    android:label="@string/app_name"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar.Fullscreen"/>

推荐阅读