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