如何在安卓中切换方向锁?

2022-09-04 04:31:19

我想在我的首选项“活动”中创建复选框,允许用户切换方向更改。

在类似的问题中,人们只写关于完全方向锁定(通过覆盖onConfigurationChanged方法或在AndroidManifest中添加configChanges.xml)或方向强制(通过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);
        }
    }
}

答案 1

我不明白 setRequestEdOrientation 有什么问题。

与风景或肖像相结合SCREEN_ORIENTATION_SENSOR似乎是您想要的,不是吗?

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

答案 2

推荐