Черные полосы в Android с надрезом с использованием Cordova в режиме погружения - PullRequest
0 голосов
/ 18 января 2019

Я делаю приложение для Android, и я хотел, чтобы оно было в режиме погружения, я сделал это с помощью плагина, но я не могу заставить работать погружение на устройстве Android с надрезом (черные полосы сверху и снизу). Как я могу использовать весь экран?

Итак, я читал много решений:

setTimeout(function(){
    if (window.AndroidFullScreen) { 
        window.AndroidFullScreen.immersiveMode(); 
        AndroidFullScreen.showUnderStatusBar();
        AndroidFullScreen.showUnderSystemUI();
}, 2000);

(также мне нужно использовать тайм-аут для внесения изменений, и я не знаю, почему, во всяком случае, чтобы применить код при запуске приложения, я использую deviceready.

  • Это позволило использовать полноэкранный режим в надрез. Я поместил это в файл javascript, используя плагин.
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
);

Но проблема в том, что системный интерфейс не скрывается, и когда я перетаскиваю сверху, чтобы открыть меню уведомлений и скрывать его, пользовательский интерфейс, наконец, исчезает, но на экране снова появляются черные полосы, так что это похоже на старый immersiveMode () (также этот код снова находится в setTimeOut).

my 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>

Итак, у меня есть это, когда я применяю immersiveMode () с плагином:

Immersive Mode

И это с другим кодом, пользовательский интерфейс не исчезает, и когда я открываю меню уведомлений и скрываю его, он снова возвращается к первому изображению.

Notification Menu

Я хочу, чтобы это было так, но без отображения интерфейса.

Спасибо.

1 Ответ

0 голосов
/ 25 января 2019

Я получил это работает. Поэтому мне просто нужно было добавить styles.xml со следующим:

<resources>
    <style name="Full">
        <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
    </style>
</resources>

Итак, я создал styles.xml и добавил его в свою папку www, а затем добавил его в свой config.xml в разделе Android для моей платформы:

<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>

Файл ресурсов добавляет файл styles.xml в папку values-v28 по правильному пути, 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...