如何在 Android 4.2 及更低版本的代码中锁定屏幕旋转?

How to lock screen rotation in the code on Android 4.2 and lower?

我在Android 4.4中用ActivityInfo.SCREEN_ORIENTATION_LOCKEDActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED控制屏幕旋转,现在是good.But在Android中设置ActivityInfo.SCREEN_ORIENTATION_LOCKED 4.2,没用。 我该怎么做?

您必须在清单中声明

<activity android:name=".MyActivity"
      android:label="@string/app_name"
      android:screenOrientation="portrait"> 

你也可以使用 android:screenOrientation="landscape"

在你的代码中类似

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

你也可以看到这个guide

您必须以编程方式覆盖它。获取当前方向,然后如果您切换以修复状态,请将该方向设置为应用程序的方向。

例如:

int rotation=getResources().getConfiguration().orientation;
                //ORIENTATION_LANDSCAPE = 2, ORIENTATION_PORTRAIT=1 
                if(rotation==1){
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                }else{
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            }

这会将其锁定到当前方向。

为了释放它,只需像这样使用 ActivityInfo.SCREEN_ORIENTATION_SENSOR

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

就是这样。

现在,最终代码将如下所示:

     if(allow_screen_change.equals("yes")){ 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
    }else if(allow_screen_change.equals("no")){ 
   int rotation=getResources().getConfiguration().orientation;
                    //ORIENTATION_LANDSCAPE = 2, ORIENTATION_PORTRAIT=1 
                    if(rotation==1){
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                    }else{
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                }
    } 

我刚刚制作了这个并在 HTC One X 上进行了测试,运行 Android 4.2 并且运行良好。希望对您有所帮助!