Android方向传感器 - 完全关闭方向传感器

时间:2012-09-24 14:22:31

标签: android user-interface android-orientation

我想知道如何在我的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"

2 个答案:

答案 0 :(得分:0)

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

另一个解决方案是进行拖曳活动,一个只能在横向上通过在清单文件中指定方向属性而在纵向中工作,并在适当的午餐中进行午餐。

答案 1 :(得分:0)

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

int currentOrientation = getRequestedOrientation();

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