Как определить ориентацию в ландшафтном режиме

Моя программа работает в ландшафтном режиме (API7), поэтому я добавил следующую команду в mainfest и мой

программа.

        android:screenOrientation="landscape"
        android:configChanges="orientation|keyboardHidden"

и

        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

Хотя в ландшафтном режиме он также должен знать, что пользователь держит в альбомной или портретной ориентации.

Отсюда я нашел несколько сообщений об ориентации. И я попытался

onConfigurationChanged и display.getOrientation();

К сожалению, onConfigurationChanged не работает. И getOrientation() просто возвращает альбомную ориентацию.

Как правильно получить информацию об ориентации без SensorManager?


person John    schedule 20.09.2012    source источник


Ответы (1)


Чтобы определить текущую ориентацию устройства во время выполнения, вы можете использовать класс WindowManager. Следующий фрагмент демонстрирует это:

WindowManager wm = getWindowManager();
Display d = wm.getDefaultDisplay();

if (d.getWidth() > d.getHeight()) {
// landscape mode
}
else {
// portrait mode
}
person Marcin S.    schedule 20.09.2012
comment
Я пробовал это решение, но оно может вернуть только ландшафтный режим. - person John; 20.09.2012
comment
Попробуйте удалить записи из файла манифеста, касающиеся screenOrientation и configurationChanges, а затем используйте WindowManager. Как только вы их размещаете, вы заставляете устройство оставаться в одном режиме, поэтому у вас всегда будет один и тот же результат. - person Marcin S.; 20.09.2012
comment
Наряду с удалением Марцина из манифеста вы также должны удалить setRequestedOrientation из кода. Как заявил Марчин, с манифестом и кодом у вас всегда будет ландшафтный режим. При тестировании на устройстве альбомная ориентация всегда должна быть, даже если вы держите телефон в вертикальном положении. - person Howard Hodson; 20.09.2012
comment
Даже я удалил screenOrientation и configurationChanges из манифеста, он не может вернуться правильно. Я думаю, что проблема связана с setRequestedOrientation. Если вы используете эту команду, она заблокирует ориентацию и повлияет на обратную связь. - person John; 20.09.2012
comment
Говард, ты прав. Итак, в этом случае он должен использовать SensorManager? Потому что, если я удалю setRequestedOrientation, весь макет будет неправильным. - person John; 20.09.2012