Желаемое поведение таково:
При вращении макет реконструируется - чтобы соответствовать новому размеру экрана. Реконструкция выполняется с использованием JQuery и математики, а не CSS.
Состояние сценариев должно оставаться неизменным, также работают таймеры и т. Д. Они должны продолжаться, как будто ничего не произошло.
Для этого я сделал следующее:
Добавлен android: configChanges = "ориентация | клавиатура скрыта" для всех действий в манифесте, чтобы самостоятельно обрабатывать изменение ориентации (примечание: я не нацеливаюсь на определенный API, поэтому я полагаю, что по умолчанию это API 1. Это означает добавление screenSize в configChanges не требуется).
Добавлен слушатель для смены ориентации:
window.onorientationchange = function () {
переменная ориентация = оконная ориентация;
переключатель (ориентация) {
случай 0:
updateScaling ();
перерыв;
case 90:
updateScaling();
break;
case -90:
updateScaling();
break;
}
}
updateScaling корректирует только макет.
И это иногда работает, но иногда происходит сбой устройства (эмулятора, а также реального устройства). В логе эмулятора вижу это предупреждение:
WARN / ActivityManager (73): Тайм-аут запуска истек, отказавшись от блокировки пробуждения!
Я провел исследование и обнаружил, что добавление более длинного loadUrlTimeoutValue в упражнении может помочь, и я добавил super.setIntegerProperty ("loadUrlTimeoutValue", 60000); к основной деятельности, но, как и ожидалось, тоже не помогает.
Я обнаружил, что многие люди жалуются на проблемы с ротацией в PhoneGap. Может быть, Framework просто глючит для этого аспекта? Я также тестировал устройства Apple, и там у меня даже не было возможности отловить вращающееся событие - эмулятор iPhone даже не изменил ориентацию, iPad изменил его, но обработчик события не вызывается, а макет остается прежним. Я попытался использовать обходной путь, который я нашел, прикрепляя слушателя к документу. Но это тоже не помогло.
Существует ли полностью надежный способ восстановления макета при вращении устройства? Если нет, могу ли я отключить вращение после того, как приложение было инициализировано определенным (это означает, что я не хочу исправлять книжную или альбомную ориентацию - я хочу, чтобы приложение отключало изменения вращения после того, как оно было инициализировано с использованием текущего). Есть ли надежный способ сделать это?
Спасибо