android – SCREEN_ORIENTATION_LANDSCAPE颠倒 – 为什么?
作者:互联网
我使用以下代码为每个用户首选项设置方向锁定:
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).
为什么这样,我如何处理这个问题才能解决它?
我的初步调查显示除了普通的两个(肖像,风景)之外还有quite a few种可能性,包括reverseLandscape,但是我的预感告诉我这个问题可能是device-dependent,所以通过使用它我可能只是为我的手机修复问题但是不适用于所有其他设备.
是否有办法在所有设备中强制正确的横向(从传感器切换时)?
为了使这更清晰,更容易重现,以下是显示问题的步骤:
>开始时手机向右旋转(顺时针),处于解锁模式(SCREEN_ORIENTATION_SENSOR),屏幕正确显示LANDSCAPE(!),
>然后调用doLock(true)
>在当前(正确)横向视图中,屏幕锁定到LANDSCAPE,而不是锁定到倒置的横向视图.即相同但垂直翻转(y变为-y).
解决方法:
您所描述的不是错误,而是Android 2.2或更低版本的预期行为.
@forgivegod提供了一个理论上正确的方法,除了对于Android 2.2或更低版本,screenOrientation.reverseLandscape和screenOrientation.reversePortrait值无法识别,即使是伪造的(如@forgivegod的代码那样).
我打赌你顺时针旋转手机(旋转= 3)而不是逆时针旋转(旋转= 1)时会看到这个问题.
尝试使用Android 2.3或更高版本,看看会发生什么.
标签:android-sensors,android-orientation,android 来源: https://codeday.me/bug/20191007/1867533.html