0

我想根据设备有 2 种不同的方向模式 - 如果设备屏幕是 Extra Large ,方向应该是LANDSCAPE,如果设备屏幕更小,方向应该是PORTRAIT

我做了以下检查:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //Set orientation for tablets and phones
    if (isXLarge()) {     
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    } else {    
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }

    setContentView(R.layout.activity_main); 
}

活动的清单条目是:

<activity 
    android:configChanges="keyboardHidden" 
    android:launchMode="singleTop" 
    android:theme="@android:style/Theme.NoTitleBar" 
    android:name=".MyActivity"/>

它在手机上运行良好,但在装有 Android 3.2 的摩托罗拉 Xoom 平板电脑上无法正常运行。

如果我们假设平板电脑处于纵向模式,则会发生以下一系列动作:

  1. Activity 以纵向模式创建和显示 - 这会在视觉上显示半秒
  2. Activity 在横向模式下被销毁并重新创建。

问题在于,平板电脑当前物理持有的方向总是存在中间转换,然后以所需的方向重新创建活动。

感谢您提供有关该问题的任何信息或建议,如果您需要更多详细信息,请告诉我。

isXLarge() 方法正确返回显示的类型

4

1 回答 1

1

如果您自己处理方向更改,那么更好的方法是android:configChanges="orientation"在活动的清单中声明并覆盖该onConfigurationChanged()方法。在您的情况下,您在onCreate()方法中设置方向,但如果用户物理更改方向,系统将更改方向。

我建议您覆盖onConfigurationChanged()并实现您的代码以提供正确的方向。

于 2012-09-10T14:58:56.693 回答