设置初始屏幕方向

3
我正在开发一个应用程序,我希望第一个屏幕以纵向(Portrait)模式显示。然后我进入下一个横向(landscape)模式的活动。
问题是,如果我返回到第一个屏幕,则它将处于横向模式,显然继承了上一个屏幕的方向。是否有可能将初始屏幕方向设置为纵向,用户可以在需要时进行更改?
谢谢!
编辑:已解决
感谢您的建议,我已经克服了这个问题。稍微有点难解释,但我会尽力说明。
因此,我的第一个活动具有以下功能:如果手机转向为横向,则会显示全屏图像;如果手机转向为纵向,则会显示列表视图。
第二个活动加载一个编辑页面,让我更改该图像。
因此,现在如果我在编辑器活动中按下返回键,则第一个活动将以LANDSCAPE列表视图加载,这不是我想要的。
因此,为了解决这个问题,我首先在第一个活动为横向模式时禁用了返回按钮,这样用户就无法在不将电话转向为横向模式的情况下从视图中移除自己。
然后我移动了代码:
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            //Show landscape picture
            }
    }

在 onCreate 方法之前将代码置于我的类顶部。这解决了我的问题,现在,如果我在横屏模式下返回第一个活动,唯一显示的就是横屏视图。希望以上内容清晰易懂。再次感谢您的帮助!

对于这个问题我很满意,但是答案让我不太满意。没有人知道另外一种解决方法吗? - thomaus
我正在寻找解决相同问题的方法。那么有没有一种方法可以设置Activity的初始方向(例如纵向),但不覆盖android:screenOrientation="user"标签? - thomaus
4个回答

5
您可以在onCreate()方法中编程设置屏幕方向:
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

在调用super.onCreate()之前,正好。

我希望能够帮助您。

最好的问候, G_J


不幸的是,这会无限期地将视图设置为纵向。我之前尝试过使用计数器来表示一旦屏幕以纵向方向打开,就允许更改屏幕。当计数> 0时,但目前还没有成功。 - Hemm K
好的...当计数>0时,你尝试将它设置回“ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR”了吗?我认为这可能可以解决它。 这是setRequestedOrientation(int screenOrientation)方法可能的参数:http://developer.android.com/reference/android/content/pm/ActivityInfo.html#screenOrientation - G_J

2
您可以在应用程序的清单文件中,在每个活动的标签内使用此方法来更改各个活动的方向:
android:configChanges="orientation"
使用任一方法。
android:screenOrientation="portrait"

或者

android:screenOrientation="landscape"

根据您的需求

1
在onCreate()方法中,您可以通过编程方式设置屏幕方向:
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

在调用super.onCreate();之后立即执行。

或者,您也可以像这样在清单文件中指定方向。

<activity android:name="com.example.project.activity"
                  android:screenOrientation="portrait"/>

0

感谢您的建议。我已经解决了这个问题。虽然有点难以解释,但我会尽力说明。

我的第一个活动有一个功能,如果手机横向旋转,它将显示一张全屏图片。而且,如果手机是纵向的,则为纵向视图,其中我有一个列表视图。

第二个活动加载一个编辑页面,让我更改那张图片。

现在,如果我在编辑器活动中按返回键。第一个活动将以LANDSCAPE的列表视图加载,这不是我想要的。

因此,为了解决这个问题。我首先禁用了第一个活动在横向模式下的返回按钮,这样用户就不能在不将手机旋转到横向模式的情况下退出视图。

然后我移动了代码:

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            //Show landscape picture
            }
    }

在onCreate方法之前,我已经回到了我的班级顶部。

这解决了我的问题,现在,如果我在横屏模式下返回到我的第一个活动,唯一显示的就是横屏视图。

我希望这足够清楚,让大家都能理解。

再次感谢您的帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接