我在过去几个小时里一直在做一些研究,以及一些试验和错误,但是我无法为这个问题找到一个完全可行的解决方案。我只想强制我的Android应用程序保持纵向模式,除非屏幕尺寸足够大(平板电脑),这将迫使应用程序处于横向模式。
到目前为止我尝试过:
<activity android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden">
以及:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
在我的onCreate和onResume中。
第一个示例在某种程度上有效,但是如果它是平板电脑,这将不允许我检查屏幕尺寸并强制横向模式。此外,如果我在执行asynctask的同时将手机保持在横向模式,应用程序将在任务完成后进入横向模式,然后只要我留在手中,我就可以再次在纵向和横向之间切换同样的活动。
所以,我不确定如何正确处理这个问题?如果我使用第二个示例(使用更多代码允许我检查屏幕大小,然后根据大小选择布局),只要我在活动中就可以工作。但是,如果我在启动活动时以横向模式握住手机,一切都会崩溃(所以看起来代码在开始时效果不佳)。
任何可能完全没有任何“错误”的建议,现在就是这种情况,我们将非常感谢!
答案 0 :(得分:0)
我意识到这已经很晚了,但这是我的答案,以防它可以帮助其他人。
我采用了程序化路线,在横向或纵向位置启动应用时没有遇到任何问题。
忽略清单选项。如你所述,在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);
}