如何在android中切换方向锁?

pix*_*xel 14 java android orientation

我想在我的偏好Activity中创建复选框,允许用户切换方向更改.

在类似的问题中,人们只编写完整的方向锁(通过覆盖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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Waz*_*_Be 5

我不明白setRequestedOrientation有什么问题.

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

if(....)
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
else if(....)
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
else if(....)
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
Run Code Online (Sandbox Code Playgroud)

  • 我想要实现的有点复杂.我希望能够锁定方向.示例:如果用户想要在我的应用程序中锁定方向,我会读取getResources().getConfiguration().orientation,然后触发setRequestedOrientation来读取当前方向.当他想要禁用锁定时,我只需将setRequestedOrientation设置为ActivityInfo.SCREEN_ORIENTATION_SENSOR即可.你的回答帮助我实现了它,所以我接受了它. (4认同)