我正在使用以下代码根据用户偏好设置方向锁定:
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
)。