【问题标题】:Android orientation sensor - switching off the orientation sensor completelyAndroid 方向传感器 - 完全关闭方向传感器
【发布时间】:2012-09-24 14:22:31
【问题描述】:

我想知道如何在我的 android 应用中针对某些活动完全关闭方向传感器。

这就是我要解决的问题。假设我使用以下命令在活动的 onCreate(或 onStart/onResume)方法中动态设置方向。

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

我的经验是,如果我以一种根据方向传感器会导致横向模式的方式握住设备,屏幕上的显示速度会明显加快。

所以感觉就像活动首先要按照传感器建议的方向设置布局,然后根据 setRequestedOrientation 方法进行切换。我什至有时会在屏幕上看到这一点,如相关帖子 android - unexpected brief orientation change at switch of activity 中所述。

似乎我在调用 setRequestedOrientation 时为时已晚。所以我想知道如何完全关闭方向传感器以避免在 setRequestedOrientation 调用之前设置方向。或者作为替代方案,如何及时调用 setRequestedOrientation。由于我需要在运行时动态确定此功能(首选项设置),因此我无法在清单中设置固定的方向。

非常感谢您提供有关此问题的任何提示。

马丁

编辑: 我忘了说,清单包含

android:configChanges="keyboardHidden|orientation|screenSize"

【问题讨论】:

  • 你试过android:screenOrientation清单属性吗?也请查看stackoverflow.com/a/4675801/1321873
  • 感谢 Hauleth 的反馈。正如我的问题结尾所提到的:由于我需要在运行时动态决定此功能(首选项设置),因此我无法在清单中设置固定的方向。

标签: android user-interface android-orientation


【解决方案1】:

之所以会影响性能,是因为 android 会终止您的 Activity,然后使用新配置启动一个新实例。 一个很好的解决方案是手动处理配置更改。 经过 将 android:configChanges="orientation" 添加到清单文件中的活动元素 在您的活动中覆盖 onConfigurationChanged 方法以进行布局

另一种解决方案是有两个活动,通过在清单文件中指定方向属性,一个只在横向工作,另一个在纵向工作,午餐是合适的。

【讨论】:

  • 感谢 Mr Me 的反馈 - 我忘了提,现在才添加, android:configChanges="orientation" 已经在 manifest 中设置了
  • 问题是根据我持有设备的方式存在差异,如果在先前的活动和新的活动中都将方向设置为固定,则不应该是这样。
  • 好的,所以重写你的活动中的 onConfigurationChanged 方法,应该会得到性能提升,android 不会杀死你的活动,而是会调用上述方法
  • 性能差异取决于我在从另一个活动启动活动时如何握住设备,所以我认为这里不涉及 onConfigurationChanged
【解决方案2】:

这是在运行时设置方向的方法,如下所示

int currentOrientation = getRequestedOrientation();

if (currentOrientation == Configuration.ORIENTATION_LANDSCAPE) {
   setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
}
else {
   setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
}

【讨论】:

    猜你喜欢
    • 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
    相关资源
    最近更新 更多