首页 > 解决方案 > 使用 Android SDK 30 将 Android 应用程序锁定为横向模式

问题描述

对于以前版本的 SDK,AndroidManifest.xml 文件中的这些行足以避免方向更改和活动重置:

android:launchMode="singleInstance"
android:screenOrientation="landscape"
android:configChanges="mcc|mnc|locale|touchscreen|orientation|fontScale|orientation|uiMode|screenLayout|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"

现在我使用的是 Android Studio V 4.1.1。

安卓 SDK 30。

安卓 NDK 21.1.6352462。NDK APP_PLATFORM:16。

Android Gradle 插件 V 4.1.1 和 Gradle 版本 6.5。

SDL V2.0.12。

OpenGL ES 2.0。

而且我无法在旋转到纵向模式时阻止布局更改。屏幕总是分成两半并将图像的多余部分切到右侧。

现在还有什么需要考虑的吗?

除此之外,我知道要实现全屏沉浸式模式,必须进行一些更改,因为通常用于它的标志已被 SDK 30 弃用。示例:https ://developer.android.com/reference/android/view/View .html#SYSTEM_UI_FLAG_FULLSCREEN

SDL Activity 处理了以前版本覆盖 Handler 方法并设置标志的问题:

Window window = ((Activity) context).getWindow();
                    if (window != null) {
                        if ((msg.obj instanceof Integer) && (((Integer) msg.obj).intValue() != 0)) {
                            int flags = View.SYSTEM_UI_FLAG_FULLSCREEN |
                                        View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
                                        View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
                                        View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
                                        View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
                                        View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.INVISIBLE;
                            window.getDecorView().setSystemUiVisibility(flags);
                            window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
                            window.clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
                            SDLActivity.mFullscreenModeActive = true;
                        } else {
                            int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_VISIBLE;
                            window.getDecorView().setSystemUiVisibility(flags);
                            window.addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
                            window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
                            SDLActivity.mFullscreenModeActive = false;
                        }
                    }

我现在将使用 WindowInsetsController 选项为 SDK 30 添加正确的设置,以防万一。

标签: androidandroid-ndkopengl-es-2.0sdl-2landscape

解决方案


推荐阅读