I am using Qt 6.11 Qt Quick android project on Windows 10 PC. My target smartphone is Samsung Galaxy A51.
I am not able to activate cutoff screen mode. If I set it up manually in Settings-Display->Cutoff it works fine.
How to programmatically set up Edge-to-Edge mode?
AndroidManifest:
<?xml version="1.0"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.qtproject.example.appRoboX" android:installLocation="auto" android:versionCode="1" android:versionName="1.0"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" android:required="true" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_SURFACE_FLINGER" /> <uses-feature android:name="android.hardware.opengl" android:required="true" /> <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:smallScreens="true" /> <application android:name="org.qtproject.qt.android.bindings.QtApplication" android:hardwareAccelerated="true" android:label="RoboX" android:allowBackup="true" android:resizeableActivity="true" android:theme="@style/AppTheme" android:icon="@mipmap/ic_launcher"> <uses-native-library android:name="libOpenCL.so"/> <activity android:name="org.qtproject.example.appRoboX.QtActivity" android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density" android:label="RoboX" android:launchMode="singleTop" android:screenOrientation="landscape" android:exported="true" android:theme="@style/AppTheme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="android.app.lib_name" android:value="appRoboX" /> </activity> </application> </manifest>
QtActivity.java:
package org.qtproject.example.appRoboX; import android.os.Bundle; import android.content.Intent; import android.util.Log; import androidx.annotation.NonNull; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.os.Build; import androidx.core.view.WindowCompat; public class QtActivity extends org.qtproject.qt.android.bindings.QtActivity { private static final String TAG = "QtActivity"; private void makeFullScreen() { Window window = getWindow(); if (window != null) { window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); window.getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN ); } } private void setCutoutMode() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { WindowManager.LayoutParams params = getWindow().getAttributes(); params.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; getWindow().setAttributes(params); } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCutoutMode(); makeFullScreen(); Log.d(TAG, "QtActivity onCreate"); } }
Style.xml:
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="AppTheme" parent="@android:style/Theme.Black.NoTitleBar.Fullscreen"> <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item> <item name="android:windowNoTitle">true</item> <item name="android:windowFullscreen">true</item> </style> </resources>
Main.qml:
ApplicationWindow {
id: mainWindow
visible: true
width: Screen.width
height: Screen.height
visibility: Window.FullScreen
flags: Qt.Window | Qt.ExpandedClientAreaHint | Qt.NoTitleBarBackgroundHint
color: "black"
...
if (Qt.platform.os === "android") {
mainWindow.showFullScreen()
mainWindow.visibility = Window.FullScreen
}
}