2

在过去的几个小时里,我一直在做一些研究,以及一些试验和错误,但是我无法为这个问题找到一个完全有效的解决方案。我只想强制我的 android 应用程序保持纵向模式,除非屏幕尺寸足够大(平板电脑),这将迫使应用程序处于横向模式。

到目前为止我已经尝试过:

<activity android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden">

也:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);

在我的 onCreate 和 onResume 中。

第一个示例确实有效,但是如果它是平板电脑,这将不允许我检查屏幕尺寸和强制横向模式。此外,如果我在执行 asynctask 时将手机置于横向模式,则应用程序将在任务完成后进入横向模式,然后只要我留在屏幕上,我就可以再次在纵向和横向之间切换相同的活动。

所以,我不确定处理这个问题的正确方法是什么?如果我使用第二个示例(使用更多代码允许我检查屏幕大小,然后根据大小选择布局)只要我在活动中就可以工作。但是,如果我在开始活动时将手机保持在横向模式,那么一切都会崩溃(所以看起来代码一开始就无效)。

任何可能完全没有任何“错误”的建议,现在就是这种情况,我们将不胜感激!

4

1 回答 1

1

我意识到这已经很晚了,但这是我的答案,以防它可能对其他人有所帮助。

我走的是程序化路线,在横向或纵向位置启动应用程序时没有遇到任何问题。

忽略清单选项。如您所述,在 onCreate() 中使用 setRequestedOrientation() 。检查屏幕大小,例如:

private boolean screenIsLarge()
{
    int screenMask = getResources().getConfiguration().screenLayout;
    if ( ( screenMask & Configuration.SCREENLAYOUT_SIZE_MASK) == 
            Configuration.SCREENLAYOUT_SIZE_LARGE) {
        return true;
    }

    if ( (screenMask & Configuration.SCREENLAYOUT_SIZE_MASK) == 
            Configuration.SCREENLAYOUT_SIZE_XLARGE) {
                return true;
    }

    return false;

}

您可以对其进行修改以包含 中列出的其他屏幕尺寸Configuration。根据此结果,您可以选择是否将屏幕设置为横向。

if( screenIsLarge() )
{
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
于 2013-12-09T22:20:08.837 回答