Android Honeycomb имеет особое значение event.orientation? - PullRequest
1 голос
/ 07 февраля 2012

Кто-нибудь еще заметил это? Я должен был создать приведенный ниже обратный вызов для обработки изменения ориентации: (упс, забыл добавить) GetAndSetInitialOrientation () вызывается изначально, что, как вы можете видеть, поэтому любые последующие изменения основаны на этом начальном значении (которое у меня есть условно). Я действительно волнуюсь, что это не безопасно! Окно.ориентация приходит с устройства или браузера? I.E любой браузер (Opera mini dolphin и т. Д.) На Honeycomb будет работать так же, или это может быть только собственный браузер?

function GetAndSetInitialOrientation() {
    var ori;
    if(Interface.Device.IsHoneyComb()) {
        ori = window.orientation != 0 ? "portrait" : "landscape";
    } else {
        ori = window.orientation == 0 ? "portrait" : "landscape";
    }

    Data.$html.removeClass('landscape portrait').addClass(ori);
}

$(window).bind('orientationchange', function(event) {
    HandleOrientationChange(event);
    RouteBasedOnOrientationSwitch();
});

function HandleOrientationChange(event) { 
    Data.$html.removeClass('landscape portrait');
    if(Interface.Device.IsHoneyComb()) {
        Data.$html.addClass(event.orientation == 'landscape' ? 'portrait' : 'landscape');
    } else {
        Data.$html.addClass(event.orientation);
    }

    Interface.Utility.UpdateHomeLinksURLs();
}

1 Ответ

1 голос
/ 07 февраля 2012

Предположение, что "window.orientation == 0 означает портрет" применимо только к портретным устройствам. Большинство планшетов (которые в значительной степени соответствуют Honeycomb / Ice Cream Sandwich) основаны на альбомной ориентации, в этом случае 0 отображается в альбомной ориентации, а ROTATE_90 и ROTATE_270 - в портретной.

Ваш текущий код работал бы, если бы все устройства были либо портретными, либо сотовыми, исключительно взаимно. Однако, поскольку существуют сотовые устройства с портретной ориентацией, и Ice Ice Sandwich работает на обоих типах устройств, вам необходим более эффективный метод обнаружения.

Одним из вариантов является вставка логического значения в ваши res / values-port / bools.xml и res / values-land / bools.xml, которые вы обнаруживаете в родительском веб-просмотре и отправляете в javascript. Другой - просто проверить screen.width и screen.height и проверить, какой из них больше. Из всего вышесказанного наиболее идеальным сценарием было бы, поскольку вы в любом случае находитесь в веб-просмотре, делать то, что вы делаете с веб-страницей в любом случае, и придавать ей макет, который в любом случае выглядит хорошо, независимо от обнаруженной ориентации.

...