Статьи

31 день Windows 8 для HTML5 | День № 2: Ориентация и Snap

Эта статья является вторым днем ​​в серии под названием « 31 день Windows 8» . Каждая из статей этой серии будет опубликована как для HTML5 / JS, так и для XAML / C # . Вы можете найти все ресурсы, инструменты и исходный код на нашем веб-сайте .

advertisementsample14


Сегодня мы поговорим о размерах экрана и почему они важны для разработки Windows 8. В первой части этой статьи мы обсудим ориентацию и некоторые простые способы сделать наше приложение более полезным в зависимости от того, как наш пользователь держит свое устройство. Во второй части мы рассмотрим наше приложение в «защелкнутом» состоянии и то, как мы могли бы изменить наш интерфейс, чтобы приспособить его к экрану гораздо меньшего размера.

Ориентация и привязка важны, потому что, если вы не учтете их в своем приложении, ваше приложение не будет одобрено для Магазина Windows.

Если вы посмотрите в требованиях сертификации приложений для Windows 8, в разделе 3.6 будет написано:

Ваше приложение должно поддерживать привязанный макет. В горизонтальной ориентации функции вашего приложения должны быть полностью доступны, когда размер экрана приложения составляет 1024 x 768. Ваше приложение должно оставаться работоспособным, когда клиент щелкает и отсоединяет приложение.

Это говорит о том, что наше приложение уже должно поддерживать как минимум три визуальных состояния:

  • 1024 x 768 (минимальное разрешение экрана и заполненное состояние)
  • 320 х 768 (с привязкой)
  • Разрешение по умолчанию, которое вы планируете, обычно 1366 x 768 .

Вот пример полноэкранного приложения, переходящего в привязанное состояние:

Вы можете видеть, что в этом случае мы реорганизовали наш контент, чтобы лучше соответствовать меньшему привязанному состоянию. Также есть возможность переместить ваше приложение в «заполненное» состояние, которое представлено светло-серым блоком справа от нашего привязанного вида.

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

Запуск и отладка

Прежде чем начать работу с поддержкой ротации и привязки, давайте поговорим о том, как мы запускаем и отлаживаем наши приложения. Теперь, если вы чем-то похожи на меня, вам нравится писать свой код на мощном четырехъядерном настольном компьютере, может быть, 8-12 ГБ ОЗУ, два 27-дюймовых монитора, мышь, клавиатура — все 9 ярдов. К сожалению, на этих машинах вряд ли есть такие вещи, как датчик ориентации, и поднять монитор, чтобы изменить ориентацию, просто не получится. К счастью, есть три разных способа запуска вашего приложения; ваш локальный компьютер, симулятор (входит в комплект) или удаленный компьютер (не входит в комплект).

RemoteMachineDebuggingOption

Опция локального компьютера — это, скорее всего, то, что вы уже пробовали. Нажмите Run, ваше приложение будет скомпилировано, развернуто на вашем компьютере, а затем отладчик Visual Studio присоединится к вашей гонке. Как мы уже говорили ранее, эта опция может иметь некоторые ограничения в зависимости от типа оборудования, на котором вы разрабатываете.

Симулятор . Это именно симулятор , а не эмулятор, как Windows Phone. Это означает, что он будет имитировать только тот компьютер, над которым вы сейчас работаете, а не действовать как совершенно другое, полностью работоспособное устройство. Нет датчика ориентации? Вам нужно другое устройство. Так почему это важно? Ну, как разработчик, вы можете делать такие вещи, как фальшивый сенсорный ввод, вращать устройство и играть с различными разрешениями экрана.

И мой самый любимый вариант, удаленная машина. К счастью, Microsoft предоставила нам возможность сделать это на удаленном вторичном устройстве, так же, как мы это делаем при создании приложений для Windows Phone. Вот краткий рассказ о том, как это работает (у MSDN более длинная и более подробная история ): Вам потребуется установить средства удаленной отладки на дополнительном устройстве. Мы используем планшет Samsung Series 7 Slate , но подойдет любое устройство Windows 8 в форм-факторе планшета. Вы можете скачать средства удаленной отладки здесь, Убедитесь, что вы выбрали подходящий вариант, x86, x64 или ARM, в зависимости от вашего устройства. Чтобы включить удаленную отладку, вам нужно будет запустить средства удаленной отладки на дополнительном устройстве. Вы увидите значок, который выглядит следующим образом: После запуска удаленного отладчика на дополнительном устройстве вернитесь на основной компьютер и выберите «Удаленный компьютер» в качестве цели для развертывания. Когда вы выбираете «Удаленный компьютер» в первый раз, вы увидите диалоговое окно, похожее на изображение ниже. Помните, что устройства в вашей подсети появятся только в том случае, если средства удаленного отладчика установлены и работают в данный момент.
RemoteDebuggerIcon

DAY2-html5-RemoteDebuggerConnections

Позже, когда вы захотите переключить устройства, вы будете пытаться найти, где хранится эта опция. Я здесь, мои дорогие читатели, чтобы избавить вас от хлопот. Откройте свойства вашего проекта (Alt + Enter) и выберите вкладку Debug. Оттуда вы можете изменить или удалить свой предыдущий выбор. Если вы отмените выбор, в следующий раз, когда вы выберете удаленную отладку, вы получите диалоговое окно из более раннего.

DAY2-html5-projectProperties

Я знаю, что ты думаешь. Невозможно, чтобы этот магический удаленный отладчик когда-либо работал между компьютером, подключенным к домену, и планшетом, который вы собираетесь тестировать. Как оказалось, все работает отлично, вас повысят за учетные данные Microsoft, связанные с этим планшетом.

Поддержка вращения

Для начала давайте создадим наше почти известное приложение из пустого шаблона в Visual Studio 2012. После создания нажмите кнопку запуска на симуляторе или на удаленном компьютере (предположим, что до конца этой статьи предположим, что я работаю на удаленном компьютере). Вы увидите ваше удивительное пустое приложение, и если вы поверните его, приложение на самом деле будет автоматически вращаться. Почему как?

По умолчанию все шаблоны в Visual Studio настроены для поддержки всех вращений. Помните этот файл package.appxmanifest? На вкладке «Интерфейс приложения» вы найдете раздел « Поддерживаемые вращения». Проверяя одно или несколько предпочтений ориентации, вы выбираете, какие ориентации будет поддерживать ваше приложение. Опять по умолчанию мы поддерживаем все.

образ

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

Ориентация дисплея

Программно мы можем спросить Windows, какова наша текущая ориентация, и даже получить уведомление о том, когда она изменится. Мы можем сделать это через API под названием Windows.Graphics.Display.DisplayProperties . Ниже я создал очень простую функцию, которая переключает currentOrientation, обновляя элемент в DOM.

function updateDisplayOrientation() {

    switch (Windows.Graphics.Display.DisplayProperties.currentOrientation) {

        case Windows.Graphics.Display.DisplayOrientations.landscape:
            results.innerText = "Landscape";
            break;

        case Windows.Graphics.Display.DisplayOrientations.portrait:
            results.innerText = "Portrait";
            break;

        case Windows.Graphics.Display.DisplayOrientations.landscapeFlipped:
            results.innerText = "Landscape (flipped)";
            break;

        case Windows.Graphics.Display.DisplayOrientations.portraitFlipped:
            results.innerText = "Portrait (flipped)";
            break;

        default:
            results.innerText = "Unknown";
            break;
    }
}

Хотя моя функция updateDisplayOrientation является довольно глупым примером, она становится немного более полезной, если мы действительно хотим подключить ее к слушателю событий. После того, как наша страница «готова» позволяет добавьте , что EventListener на « orientationchanged » , называя нашу updateDisplayOrientation функцию.

....

results = document.getElementById("resultText");

var dispProp = Windows.Graphics.Display.DisplayProperties;
dispProp.addEventListener("orientationchanged", updateDisplayOrientation, false);

updateDisplayOrientation(); // call to set the inital state

....

Теперь, когда мы поворачиваем устройство, наше приложение должно обновлять элемент на экране в соответствии с состоянием нашей ориентации.

Датчик ориентации

Работа с currentOrientation довольно проста, но также ограничена некоторыми аспектами. Устройства в наши дни имеют множество поддерживаемых датчиков. Это также верно для ориентации, и Windows 8 SDK предоставил нам SimpleOrientationSensor, найденный в Windows.Devices.Sensors.SimpleOrientationSensor. В отличие от нашего предыдущего примера, SimpleOrientationSensor представляет собой API-интерфейс поверх фактического аппаратного датчика, поэтому в зависимости от вашего оборудования может работать или не работать следующее.

Итак, почему другой путь? Отличный вопрос, и я честно почесал голову над этим. Я пришел к своим собственным выводам, что он поддерживает самый широкий набор аппаратного обеспечения, а также точный контроль зерна, когда у вас есть датчик. Не у каждой машины будет физический датчик, но текущая ориентация всегда будет работать. Теперь я знаю, о чем ты думаешь. Конечно, это одно государство, пейзаж. Но это на самом деле не так. В зависимости от вашей графической карты вы можете вращать монитор и иметь другой вид. Например, вы можете перевернуть монитор и установить его в портретном режиме. В этом случае currentOrientation фактически скажет вам это.

Вернуться к SimpleOrientationSensor. Как и прежде, я настроил другой оператор switch, чтобы увидеть, в каком положении находится датчик.

....

switch (e.orientation) {
    case Windows.Devices.Sensors.SimpleOrientation.notRotated:
        results.innerText = "Not Rotated";
        break;

    case Windows.Devices.Sensors.SimpleOrientation.rotated90DegreesCounterclockwise:
        results.innerText = "Rotated 90";
        break;

    case Windows.Devices.Sensors.SimpleOrientation.rotated180DegreesCounterclockwise:
        results.innerText = "Rotated 180";
        break;

    case Windows.Devices.Sensors.SimpleOrientation.rotated270DegreesCounterclockwise:
        results.innerText = "Rotated 270";
        break;

    case Windows.Devices.Sensors.SimpleOrientation.faceup:
        results.innerText = "Face Up";
        break;

    case Windows.Devices.Sensors.SimpleOrientation.facedown:
        results.innerText = "Face Down";
        break;

    default:
        results.innerText = "Undefined orientation " + e.orientation;
        break;
}

....

И, конечно, все это можно найти и найти, но гораздо полезнее, если мы сможем подключиться к событию, уведомляющему нас об изменениях. Как и прежде, мы подключимся к событию с измененной ориентацией, но на этот раз на нашем датчике. Конечно, вы захотите проверить, чтобы убедиться, что у вас есть датчик, к которому можно подключиться.

....

results = document.getElementById("resultText");

var sensor = Windows.Devices.Sensors.SimpleOrientationSensor.getDefault();
if ( sensor ) {
    sensor.addEventListener("orientationchanged", sensorOrientationChanged);
    results.innerText = "Sensor Found";
}
else {
    results.innerText = "No Sensor Found";
}

....

Замыкание

На данный момент у нас есть приложение, которое распознает, что ориентация устройства изменилась. Это хорошо, когда мы хотим сделать что-то конкретное в коде с ориентацией, но что, если мы просто хотим, чтобы наше приложение переориентировалось на то, чтобы оно было читаемым / полезным для нашего пользователя? Адаптивный веб-CSS3 явно повлиял на то, как мы разрабатываем макеты наших приложений для Магазина Windows. Windows поддерживает четыре макета для нашего приложения; Пейзаж, портрет, заполнены и привязаны. Мы поддерживаем каждый из этих макетов с помощью CSS3 Media Queries .

Пейзажный вид. По умолчанию наше приложение запускается как альбомная. Это максимум вашей недвижимости, это ваш холст.

Альбомная ориентация

@media screen and (-ms-view-state: fullscreen-landscape)

Портретный вид. Пейзаж на своей стороне. Что еще?

PortraitOrientation

@media screen and (-ms-view-state: fullscreen-portrait)

Защелкнутый и заполненный вид. Здесь вещи начинают становиться интересными и творческими. В симуляторе ниже слева вы видите приложение в заполненном состоянии, а справа вы можете увидеть приложение в привязанном состоянии. Для этого требуется минимальное разрешение экрана 1366px x 768px.

SnappedState

@media screen and (-ms-view-state: snapped)

@media screen and (-ms-view-state: filled)

Это означает, что вы можете запустить два приложения рядом. Это также означает, что вы, возможно, захотите пересмотреть свой пользовательский опыт, особенно в привязанном представлении. Взгляните на финансовое приложение Microsoft . Когда вы находитесь в привязанном виде, вы получаете ваши любимые, а не весь опыт.

щелкнул-полный рабочий стол

Как я упоминал ранее, мы делаем это через CSS3 Media Query . Из всех представленных выше представлений видно, что мы делаем что-то простое, например, меняем цвет фона.

@media screen and (-ms-view-state: snapped) {
    body {
        -ms-grid-columns: 20px 1fr 20px;

        background-color: blue;
        font-size: large;
    }

    header[role=banner] {
        -ms-grid-columns: 20px 1fr;
    }
}

Резюме

Сегодня мы рассмотрели, как мы можем определить ориентацию устройства пользователя, а также как использовать новый элемент LayoutAwarePage для управления различными визуальными состояниями, с которыми может столкнуться наше приложение. В интернете есть множество замечательных примеров, связанных с ориентацией и привязкой, но если есть один урок, который вы извлечете из сегодняшней статьи, это:

Ваша заявка ДОЛЖНА подтверждать состояние привязки. Удостоверьтесь, что Вы приспосабливаете это.

Завтра мы посмотрим на заставку. Вы, вероятно, видели что-то подобное раньше. Это первое, что увидят ваши пользователи, поэтому давайте убедимся, что мы правильно поняли. Увидимся позже. Вы можете получить полное решение и инструменты ниже.

downloadHTMLdownloadTheTools