3.0+ 版本如何旋转屏幕

  • Creator 版本:3.5.0

  • 目标平台:android

3.5.0 旋转代码如下:

    export function setScreenOrientationPortrait() {
        if (sys.os === sys.OS.ANDROID) {
            return jsb.reflection.callStaticMethod("com/cocos/game/AppActivity", "changeOrientation", "(I)V", 1);
        }
    }

    export function setScreenOrientationPortrait() {
        sdk.setScreenOrientationPortrait();

        view.setDesignResolutionSize(global.applicaion.designHeight, global.applicaion.designWidth, ResolutionPolicy.FIXED_WIDTH);
        view.setOrientation(macro.ORIENTATION_PORTRAIT);
    }

Android 端代码

    /**
     * 设置屏幕方向
     * @param orientationType 0 横屏;1 竖屏
     */
    public static void changeOrientation(final int orientationType) {
        Log.d(TAG, "change set orientation: " + orientationType);
        final Activity app = SDKWrapper.shared().getActivity();
        app.runOnUiThread(() -> app.setRequestedOrientation(orientationType));
    }

在调用 setScreenOrientationPortrait 之后,屏幕是旋转成功了,但界面内的内容大约被放大了 1.78 倍,导致界面显示不完全。有参考 ccc 2.0 时代的写法 屏幕旋转实现方案,支持全平台 ,只是该方案在 3.0 版本失效了。

下面这些方法已失效

let frameSize = cc.view.getFrameSize()
cc.view.setFrameSize(frameSize.height,frameSize.width)

window.dispatchEvent(new cc.Event.EventCustom('resize', true))

请问各位大佬,应该如何设置,才能正确的显示 UI 内容

补充:

整个页面看起来被放大了 width / height 倍。如果是 1920*1080 的屏幕,就被放大了 1.7777 倍。

参考这个方案试试:

参考这个方案试试:【CocosCreator 3.x 技术方案分享】第二期

我的解决方案也是参照的这个,后来我在最外层的 Canvas 加入 Widget 组件就可以了