Я использую следующий код для установки блокировки ориентации для каждого пользовательского предпочтения:
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
).