如何在android中显示反向横向时锁定屏幕方向?

Ram*_*man 2 android screen-orientation

即时通讯尝试orientation在Android应用程序中锁定屏幕.我使用以下代码锁定屏幕方向时,特定按钮点击火.

// Inside button click

Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
 if (display.getOrientation() == 1) {
                   setRequestedOrientation(0);
 } else if (display.getOrientation() == 0) {
                   setRequestedOrientation(1);
 } else if (display.getOrientation() == 3) {
                   setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
 }
Run Code Online (Sandbox Code Playgroud)

以上代码适用于横向和纵向屏幕方向,但它不适用于反向横向模式.在这种情况下,我的活动总是将其更改orientation为默认模式.landscape此外,我注意到,当设备处于反向横向模式时,display.getOrientation()始终返回3.
我怎样才能找到这个问题的解决方案?

小智 15

我一直在使用API​​ 8处理同样的问题.看起来像在reserseLandscape模式下,如果你打电话

getResources().getConfiguration().orientation 
Run Code Online (Sandbox Code Playgroud)

Android将返回2(SCREEN_ORIENTATION_USER),它根本不会锁定方向.实际上,即使值实际存在,也不为ActivityInfo类定义常量SCREEN_ORIENTATION_REVERSE_LANDSCAPE.对于我的应用程序,我最终创建了这个方法:

public void lockScreenOrientation() {
    switch (((WindowManager) getSystemService(WINDOW_SERVICE))
        .getDefaultDisplay().getRotation()) {
    case Surface.ROTATION_90: 
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
        break;
    case Surface.ROTATION_180: 
        setRequestedOrientation(9/* reversePortait */); 
        break;          
    case Surface.ROTATION_270: 
        setRequestedOrientation(8/* reverseLandscape */); 
        break;
    default : 
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    }
}
Run Code Online (Sandbox Code Playgroud)

每当我需要锁定方向时,我都会调用此方法,然后我可以简单地释放它

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.