我正在使用以下代码根据用户偏好设置方向锁定:
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)
并...而不是将屏幕锁定在其当前(正确的)横向 View 中的
LANDSCAPE
上,而是锁定为一个上下颠倒的横向 View 。即完全相同,但垂直翻转(y
变为-y
)。为什么会这样,如何解决此问题才能解决?
我的最初查询显示,除了常见的两种(
portrait
)以外,还有quite a few的可能性(包括landscape
),但是我的直觉告诉我这个问题可能是device-dependent,因此通过使用它,我可能只为我的手机解决了这个问题,但是不适用于所有其他设备。是否有办法在所有设备中强制正确的
reverseLandscape
方向(从landscape
切换时)?为了使此内容更清晰,更容易重现,以下是显示该问题的步骤:
sensor
)在解锁模式(SCREEN_ORIENTATION_SENSOR
)中向右旋转手机(顺时针)开始,屏幕正确显示LANDSCAPE
(!),doLock(true)
LANDSCAPE
上,而是锁定为上下颠倒横向 View 。即完全相同,但垂直翻转(y
变为-y
)。 最佳答案
您所描述的不是错误,而是Android 2.2或更低版本的预期行为。
@forgivegod提供了一种理论上正确的方法,除了在Android 2.2或更低版本中,即使伪造了screenOrientation.reverseLandscape
和screenOrientation.reversePortrait
值也无法识别(就像@forgivegod的代码一样)。
我敢打赌,当您顺时针旋转手机(rotation = 3)而不是逆时针旋转(rotation = 1)时,您会看到此问题。
尝试使用Android 2.3或更高版本,看看会发生什么。