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