【问题标题】:How to make an application ignore screen orientation change?如何让应用程序忽略屏幕方向变化?
【发布时间】:2010-11-27 11:39:38
【问题描述】:

有没有办法让应用程序完全忽略屏幕方向的变化?

【问题讨论】:

  • 请注意,显然在 Android 1.5 中存在一个错误。如果您使用自定义屏幕尺寸(例如 800x480,就像在 Apad 上)并强制它横向(通过 XML 或从代码),那么它实际上是纵向的。
  • 如果你想通过代码锁定和解锁方向,你可以从github.com/delight-im/Android-BaseLib/blob/master/Source/src/im/…调用Screen.lockOrientation(this)(更灵活)

标签: android


【解决方案1】:

可以很容易地覆盖默认行为并在键盘打开/关闭时禁止屏幕方向更改。

修改清单

打开清单,切换到应用程序选项卡,然后选择您希望为方向更改行为覆盖的所需 Activity。

  1. 在属性中,您需要更改两个字段: 屏幕方向:选择纵向或横向 - 随心所欲。这将是默认布局。

  2. 为您希望覆盖的配置更改选择事件: 在这种情况下,这些是keyboardHidden 和orientation。

修改 Activity 实现

现在您需要覆盖所需 Activity 中的单个函数。

只需将以下函数添加到您的 Activity 类中即可。

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
}

如果使用Source->Override/Implement Methods,这是默认实现 菜单选项。

就是这样!现在您的方向将始终保持不变。

请记住,此设置是针对每个 Activity 的 - 因此您需要为每个要禁止方向更改的 Activity 重复此步骤!

(基于 SDK 1.1)

【讨论】:

  • 不是简单地调用超类根本不会改变任何东西吗?
  • 我只是在玩一些非常相似的东西——我认为对 Manifest 文件的更改就足够了,至少它们对我来说是足够的(这似乎合乎逻辑,正如 Matthias 指出的那样)。
  • 在manifest中改变就足以锁定方向,那么onConfigurationChanged()的目的是什么?
  • 就我的测试而言:如果您只是更改清单,而不覆盖 onConfigurationChanged 函数,则将调用 onCreate() 和整个活动生命周期事件。如果您将更改清单并覆盖 onConfigurationChanged 函数,则不会调用它。
【解决方案2】:

您可以使用以下行(在活动中调用)对代码进行相同的更改:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

一旦您进行此调用,您的应用程序将保持横向(或纵向)模式。您可以使用相同的调用(使用不同的 ActivityInfo 枚举)使其再次对方向移动敏感。

Developing Orientation-Aware Android Applications 中有一篇关于该主题的完整 DevX 文章。

(警告:自从我发布此链接以来,DevX 已经设置了注册墙。)

【讨论】:

  • 这是唯一适用于 Android 2.2 的答案。谢谢!
【解决方案3】:

您可以像这样在AndroidManifest.xml 文件中定义您的活动:

<activity 
    android:name=".MyActivity" 
    android:screenOrientation="portrait"
    android:configChanges="orientation|keyboardHidden|keyboard"/>`

在这种情况下,您应该为每个活动设置属性。我没有找到适用于所有应用程序的内联解决方案。

【讨论】:

    【解决方案4】:

    如果您通过AndroidManifest.xmlsetRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 进行设置,您将遇到平板电脑 的问题。它们的自然/默认方向是横向。

    如果你真的想完全忽略屏幕方向的变化,我会使用这个setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); 值。我会在 StackOverflow 问题中详细讨论它Android natural sensor orientation help

    这里是xml:

    <activity 
        android:name=".MyActivity" 
        android:screenOrientation="nosensor"
        android:configChanges="orientation|keyboardHidden|keyboard"/>
    

    【讨论】:

    • 这不会旋转屏幕。
    • 我不确定我是否遵循...这就是重点,避免旋转屏幕。
    • “完全忽略屏幕方向变化”是指旋转时,数据将保持不变。
    【解决方案5】:
    <activity  android:screenOrientation="portrait"></activity>
    

    【讨论】:

      【解决方案6】:

      您想读取当前方向并在整个活动的生命周期中保持这种方式,所以我在 onCreate 结束时做了以下操作:

      // choose an orientation and stay in it
      if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
          setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
      else if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
          setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
      

      【讨论】:

        【解决方案7】:

        将此添加到活动中:

        android:configChanges="orientation|screenSize"

        【讨论】:

          猜你喜欢
          • 2013-06-20
          • 2013-06-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-17
          • 1970-01-01
          相关资源
          最近更新 更多