1

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

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

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

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

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

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

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

马丁

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

android:configChanges="keyboardHidden|orientation|screenSize"
4

2 回答 2

0

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

int currentOrientation = getRequestedOrientation();

if (currentOrientation == Configuration.ORIENTATION_LANDSCAPE) {
   setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
}
else {
   setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
}
于 2012-09-24T14:59:07.003 回答
0

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

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

于 2012-09-24T14:40:27.683 回答