【发布时间】:2014-02-04 20:01:53
【问题描述】:
我的应用程序设计为“仅限横向”。必须支持左右横向之间的旋转,所以我使用android:screenOrientation="sensorLandscape"。
但是,当必须完全禁用旋转时,我的应用中有一个小游戏(因为这个小游戏是由设备 tlting 控制的)。小游戏结束后,方向处理策略必须恢复为sensorLandscape。
禁用方向更改的标准方法是调用
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
但事实并非如此!正如here 所述(并由我检查),它会导致方向更改为默认状态(可能是纵向)。
因此,从sensorLandscape 到“disableRotation”的唯一方法是明确设置所需的方向。所以我有一个选择:要么调用
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
或
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
显然,我需要传递一个当前方向,但Android似乎没有获取它的功能!
getResources().getConfiguration().orientation 返回Configuration.ORIENTATION_PORTRAIT 或Configuration.ORIENTATION_LANDSCAPE,这是没有用的。
getWindowManager().getDefaultDisplay().getRotation() 似乎更有希望。它返回Surface.ROTATION_0 ... Surface.ROTATION_270,我尝试使用如下逻辑:
int getCurrentOrintation()
{
final int rot = getWindowManager().getDefaultDisplay().getRotation();
if (Surface.ROTATION_0 == rot || Surface.ROTATION_90 == rot)
{
return ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
}
return ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
}
它在 Google Nexus 上运行良好,但在 Kindle Fire HD 上返回翻转方向。
那么,原则上是否可以在 Android 中临时锁定方向更改?
【问题讨论】:
-
小游戏是否使用单独的活动?
-
@Submersed 没有。无论如何,如果我使用单独的活动有什么帮助?
标签: android android-orientation