我正在制作一个android应用程序,我希望它处于沉浸式模式,它是通过插件完成的,但是我无法在带有缺口的android设备上进行沉浸式工作(顶部和底部均为黑条)。如何使用整个屏幕?
所以我一直在阅读很多解决方案:
setTimeout(function(){
if (window.AndroidFullScreen) {
window.AndroidFullScreen.immersiveMode();
AndroidFullScreen.showUnderStatusBar();
AndroidFullScreen.showUnderSystemUI();
}, 2000);
(另外,我还需要使用超时来应用更改,但我不知道为什么,无论如何在应用程序启动时应用代码,我正在使用deviceready。
AndroidFullScreen.setSystemUiVisibility(
AndroidFullScreen.SYSTEM_UI_FLAG_LAYOUT_STABLE
| AndroidFullScreen.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| AndroidFullScreen.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| AndroidFullScreen.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| AndroidFullScreen.SYSTEM_UI_FLAG_FULLSCREEN
| AndroidFullScreen.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
, successFunction, errorFunction
);
但是问题是系统UI不会隐藏,当我从顶部拖动以打开通知菜单并将其隐藏时,UI最终消失了,但是屏幕又回到了黑条,所以它就像旧的immersiveMode()(此代码也位于setTimeOut中)。
我的config.xml:
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.adia.security" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<platform name="android">
<allow-intent href="market:*" />
<preference name="AndroidLaunchMode" value="singleInstance" />
<preference name="DisallowOverscroll" value="true" />
<preference name="KeepRunning" value="true" />
</platform>
<edit-file parent="/manifest/application" target="AndroidManifest.xml">
<meta-data android:name="android.max_aspect" android:value="2.1" />
<activity android:resizeableActivity="false" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" />
</edit-file>
<preference name="Fullscreen" value="true" />
<preference name="StatusBarOverlaysWebView" value="true" />
<plugin name="cordova-plugin-fullscreen" spec="1.2.0" />
<plugin name="cordova-plugin-splashscreen" spec="5.0.2" />
<engine name="android" spec="^7.1.4" />
</widget>
因此,当我将sivesiveMode()与插件一起应用时,我就有这个了:
这和其他代码一样,UI并没有消失,当我打开通知菜单并将其隐藏时,它又回到了第一张图片。
我想要的是这样但不显示UI。
谢谢。
答案 0 :(得分:1)
我知道了。所以我只需要添加以下样式:
<resources>
<style name="Full">
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
</style>
</resources>
因此,我创建了styles.xml并将其添加到我的www文件夹中,然后将其添加到我的平台android部分的config.xml中:
<platform name="android">
<resource-file src="www/styles.xml" target="app/src/main/res/values-v28/styles.xml" />
<edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/application">
<application android:resizeableActivity="false"/>
</edit-config>
<edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/application/activity">
<activity android:theme="@style/Full"/>
</edit-config>
<config-file parent="./application" target="AndroidManifest.xml">
<meta-data android:name="android.max_aspect" android:value="5.0" />
</config-file>
</platform>
资源文件,在正确的路径中的values-v28文件夹中添加styles.xml,v28用于28 sdk,因此是Android 9。
然后我两次使用edit-config,第一个我修改应用程序以添加android:resizeableActivity =“ false”,以使元数据android.max_aspect起作用,而android.max_aspect强制android使用所有屏幕的长宽比。
我在活动中添加了自定义样式的另一个edit-config,如果将其放置在应用程序中将无法使用,因此将其放置在此处。
然后使用插件函数immersiveMode()一切正常。
Android Notch Fullscreen Immersive
我在这里找到了解决方案: https://proandroiddev.com/making-notch-friendly-apps-for-android-75776272be5c