在启动时将应用锁定到当前屏幕方向

时间:2014-03-20 13:39:35

标签: android screen-orientation

我正在开发一个我不想管理savedInstances方向更改的应用程序,这听起来很懒,但对于像我这样的初学者来说,这可能是一种痛苦学习一些技巧然后我可以将其实现到应用程序中。

尽管如此,我想以不同的方式支持风景和肖像。我想要做的是在启动应用程序时检测当前屏幕方向,然后将应用程序会话锁定到该方向。然后,应用程序必须重新启动以强制更改屏幕方向。如果检测到方向改变,我只需弹出一个对话框5秒钟,以请求重新启动应用程序。

这可能不是最好的解决方法,但我想这样做而且我不知道怎么做。任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:1)

在清单文件的活动代码中添加以下属性

 android:configChanges="orientation|screenSize"

答案 1 :(得分:0)

处理锁定/释放方向的类:

public class Orientation {

    public static void lockOrientation(Activity activity) {
        Display display = ((WindowManager) activity
                .getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
        int rotation = display.getRotation();
        int tempOrientation = activity.getResources().getConfiguration().orientation;
        int orientation = 0;
        switch (tempOrientation) {
        case Configuration.ORIENTATION_LANDSCAPE:
            if (rotation == Surface.ROTATION_0
                    || rotation == Surface.ROTATION_90)
                orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
            else
                orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
            break;
        case Configuration.ORIENTATION_PORTRAIT:
            if (rotation == Surface.ROTATION_0
                    || rotation == Surface.ROTATION_270)
                orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
            else
                orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
        }
        activity.setRequestedOrientation(orientation);
    }

    public static void releaseOrientation(Activity activity) {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
    }

}

然后只需在onCreate中调用您的活动Orientation.lockOrientation(this)