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

如何在Android 4.2及更低版本的代码中锁定屏幕旋转?,android,screen-orientation,Android,Screen Orientation,我在安卓4.4中使用了ActivityInfo.SCREEN\u ORIENTATION\u LOCKED和ActivityInfo.SCREEN\u UNSPECIFIED来控制屏幕旋转,这是很好的。但是当我在安卓4.2中设置ActivityInfo.SCREEN\u ORIENTATION\u LOCKED时,它是无用的。 我怎么做呢?您必须在您的舱单中声明 <activity android:name=".MyActivity" android:label="@strin

我在安卓4.4中使用了
ActivityInfo.SCREEN\u ORIENTATION\u LOCKED
ActivityInfo.SCREEN\u UNSPECIFIED
来控制屏幕旋转,这是很好的。但是当我在安卓4.2中设置
ActivityInfo.SCREEN\u ORIENTATION\u LOCKED
时,它是无用的。
我怎么做呢?

您必须在您的舱单中声明

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

您也可以看到这一点。

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

例如

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\u ORIENTATION\u 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);
                }
    } 
就这样

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

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上测试,运行安卓4.2,效果很好。希望有帮助

您想要模式
横向
?您可以在“查看我的答案”中设置android:screenOrientation=“纵向”或android:screenOrientation=“横向”,如果它解决了您的问题,请将其标记为正确答案;)我想实现一个功能,有一个切换按钮,当它被选中时,如果我旋转我的设备,屏幕将无法旋转,当它被取消选中时,屏幕将可以旋转,我已经实现了这个功能,但它不能在Android 4.2中像在Pad中的360 Browser那样显示。@user4689328您必须通过编程覆盖它。获取当前方向,然后如果切换到修复状态,将其设置为方向,否则不做任何操作。if(允许屏幕更改.equals(“是”){setRequestedOrientation(ActivityInfo.screen_orientation_UNSPECIFIED);}else if(允许屏幕更改.equals(“否”){setRequestedOrientation(ActivityInfo.screen_orientation_锁定)}这种方法在安卓4.4系统中效果良好,但在安卓4.2中效果不佳,如华为S8-301w。