我正在使用以下代码根据用户偏好设置方向锁定:
private void doLock(boolean locked) {
if (locked) {
int o = getResources().getConfiguration().orientation;
if (o == Configuration.ORIENTATION_LANDSCAPE)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
else if (o == Configuration.ORIENTATION_PORTRAIT)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
}
}
它可以工作,除了我处于解锁模式 ( SCREEN_ORIENTATION_SENSOR
) 且屏幕LANDSCAPE
正确显示 (!) 的情况,然后调用doLock(true)
并...
而不是屏幕锁定LANDSCAPE
在其当前(正确的)横向视图中,它锁定到一个倒置的横向视图。即完全相同但垂直翻转(y
变为-y
)。
为什么会这样,我该如何解决这个问题以解决它?
我的初步调查表明,除了常见的两个 ( , )之外还有很多可能性,包括但不适用于所有其他设备。portrait
landscape
reverseLandscape
有没有办法在所有设备中强制正确的landscape
方向(从 切换时)?sensor
为了使这更清晰和更容易重现,以下是显示问题的步骤:
- 从手机向右旋转(顺时针)开始,处于解锁模式(
SCREEN_ORIENTATION_SENSOR
),屏幕LANDSCAPE
正确显示(!), - 然后调用
doLock(true)
LANDSCAPE
它不是锁定在当前(正确的)横向视图中的屏幕,而是锁定到倒置的横向视图。即完全相同但垂直翻转(y
变为-y
)。