【问题标题】:Android 3.2 Motorola Xoom Orientation ChangeAndroid 3.2 摩托罗拉 Xoom 方向更改
【发布时间】:2012-09-10 14:39:48
【问题描述】:

我希望有 2 种不同的方向模式,具体取决于设备 - 如果设备屏幕超大,方向应该是 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 的 Motorola Xoom 平板电脑上无法正常运行。

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

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

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

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

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

【问题讨论】:

    标签: android screen-orientation motorola orientation-changes xoom


    【解决方案1】:

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

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

    【讨论】:

    • 你能解释一下这有什么帮助吗?我不想自己处理方向,除非我绝对必须 - 我只需要在 XLarge 屏幕上固定 LANDSCAPE 方向并在较小屏幕上固定 PORTRAIT 方向。
    • 因此,如果我理解正确,您希望在 XLarge 屏幕上以横向模式显示您的应用程序,而不管它的物理方向是什么。在这种情况下,如果您不覆盖 onConfigurationChanged() 方法,您的活动将在每次更改物理方向时被销毁并重新创建。这意味着每次发生这种情况时,您都必须保存数据/状态。根据您的问题,我怀疑这可能是它被破坏和重建的原因。
    • 在我看来,我不够熟练,无法理解您的意思,我无法将您的回答作为解决问题的指导。所以我会投票 +1 并继续考虑另一种解决方案......
    • 尝试像 android:configChanges="keyboardHidden | orientation" 那样在清单中的 configChanges 中添加方向。这将避免重新创建活动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多