如何在android中切换方向锁?

我想在我的偏好Activity中创建checkbox,允许用户切换方向更改。

在类似的问题中,人们只编写完整的方向锁(通过覆盖onConfigurationChanged方法或在AndroidManifest.xml中添加configChanges)或方向强制(通过setRequestedOrientation)。

有没有办法切换方向锁?


编辑:我创建了一个方法,将首选方向设置为三种状态之一:横向,纵向和传感器。 此方法与检索方向getResources().getConfiguration().orientation)结合使用,并将检索到的方向保存到首选项中。 然后在需要锁定方向的活动中,我使用首选项的首选方向来激活此方法。

 private static void setActivityOrientation(Activity activity, int preferenceOrientation) { if (preferenceOrientation == Configuration.ORIENTATION_LANDSCAPE) { if( activity.getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){ // You need to check if your desired orientation isn't already set because setting orientation restarts your Activity which takes long activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } } else if (preferenceOrientation == Configuration.ORIENTATION_PORTRAIT) { if( activity.getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_PORTRAIT){ activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } } else { if( activity.getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_SENSOR){ activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); } } } 

我不明白setRequestedOrientation有什么问题。

SCREEN_ORIENTATION_SENSOR结合到风景或肖像似乎你想要的,不是吗?

 if(....) setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); else if(....) setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); else if(....) setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);