【问题标题】:How to toggle orientation lock in android?如何在android中切换方向锁定?
【发布时间】:2011-02-19 11:32:05
【问题描述】:

我想在我的偏好 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);
        }
    }
}

【问题讨论】:

    标签: java android orientation


    【解决方案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);
    

    【讨论】:

    • 我想要实现的有点复杂。我希望能够锁定方向。示例:如果用户想在我的应用程序中锁定方向,我会读取 getResources().getConfiguration().orientation,然后触发 setRequestedOrientation 以读取当前方向。当他想禁用锁定时,我只需将RequestedOrientation 设置为ActivityInfo.SCREEN_ORIENTATION_SENSOR。你的回答帮助我意识到了这一点,所以我接受了。
    • @pixel 你发现反向了吗?我在这里遇到同样的问题:stackoverflow.com/questions/6599770/screen-orientation-lock
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    相关资源
    最近更新 更多