Программирование для Windows Phone для начинающих

Аппаратные средства устройств, поддерживающих Windows Phone 7

Показывать лекцию целиком

Аппаратные средства

Цель лекции: Рассмотрение аппаратных средств смартфонов на основе данной платформы, разбор применения всех возможностей данных устройств. Изучение работы кнопки "Назад".

Первоначальные версии устройств Windows Phone 7 будут иметь экран одного размера. (В будущем ожидается использование еще одного размера экрана.) Присутствие многих аппаратных возможностей гарантируется на каждом устройстве.

(рис 3.1) Кнопки панели

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

  • Back (Назад) Программы могут использовать эту кнопку для навигации, во многом аналогично кнопке Back в Веб-браузере. При использовании со стартовой страницы программы эта кнопка приводит к завершению программы.
  • Start (Пуск) Эта кнопка обеспечивает переход пользователя к стартовому экрану телефона; в противном случае этот экран недоступен программам, выполняющимся на телефоне.
  • Search (Поиск) Операционная система использует эту кнопку для запуска поиска.
  • Первоначальные версии устройств Windows Phone 7 имеют экран размером 480x800 пикселей. В будущем ожидается также применение экранов размером 320x480 пикселей. Никаких других вариантов для Windows Phone 7 не планируется, поэтому очевидно, что эти два размера экрана играют очень важную роль в разработке телефона.

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

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

    (рис 3.2) Экраны

    Мы рассматриваем экраны в портретном режиме, потому что обычно именно так ориентированы экраны смартфонов. Для сравнения, экран оригинального Zune – 240x320 пикселей; Zune HD – 272x480.

    Конечно, телефон можно перевернуть горизонтально и получить экран в альбомном режиме. Некоторые программы могут требовать определенной ориентации экрана телефона, другие будут более гибкими.

    Разработчик полностью контролирует, в какой мере создаваемое им приложение поддерживает ориентацию экрана. По умолчанию приложения Silverlight отображаются в портретном режиме, но можно сделать так, чтобы они самостоятельно приспосабливались к изменениям ориентации экрана. Специально для целей определения изменения ориентации предусмотрены новые события, а некоторые изменения обрабатываются автоматически. Для сравнения, разработчики игр обычно задают конкретную ориентацию экрана пользователя. Программы на XNA используют альбомный режим по умолчанию, но это свойство легко переопределить.

    В портретном режиме маленький экран равен половине старого VGA-экрана (т.е. 640x480).

    В альбомном режиме большой экран имеет размеры, соответствующие так называемому WVGA ("wide VGA"). В альбомном режиме соотношение ширины и высоты маленького экрана составляет 3:2 или 1,5; для большого экрана это соотношение 5:3 или 1,66…. Ни одно из этих соотношений не совпадает с пропорциями телевизионного экрана, которые для телевизоров стандартного разрешения составляют 4:3 или 1,33… и для телевизоров с высоким разрешением – 16:9 или 1,77…. Соотношение высоты и ширины экрана Zune HD – 16:9.

    Как и во многих современных телефонах и Zune HD, для экранов телефонов Windows Phone 7, скорее всего, будет использоваться технология ОСИД ("органический светоизлучающий диод" Organic light emitting diode, OLED), хотя это не является требованием к оборудованию. Экраны ОСИД отличаются от плоских экранов, используемых в прошлом, тем, что их энергопотребление пропорционально излучаемому свету. Например, ОСИД-экран потребляет менее половины энергии, необходимой для жидкокристаллического (ЖК) монитора того же размера, но это только в режиме, когда экран преимущественно темный. Для полностью светлого экрана ОСИД потребляет более чем в три раза больше энергии, необходимой для ЖК.

    Продолжительность автономной работы имеет первостепенную важность для мобильных устройств, поэтому эта характеристика ОСИД-дисплеев предполагает применение преимущественно черных фонов с редкими графическими элементами и контрастных шрифтов. Независимо от этого пользователи Windows Phone 7 могут выбирать между двумя основными цветовыми темами: светлый текст на темном фоне или темный текст на светлом фоне.

    Пользовательский ввод для программ Windows Phone 7 будет осуществляться посредством мультисенсорного ввода. Экраны поддерживают технологию емкостного касания. Это означает, что они отвечают только на прикосновение человека, но не реагируют на касание стилусом или другие формы давления. touch Экраны устройств Windows Phone 7 должны распознавать одновременное касание как минимум в четырех точках.

    Аппаратные клавиатуры необязательны. Необходимо предполагать, что дизайн телефонов может быть разным, поэтому при использовании клавиатуры экран может быть либо в портретном, либо в альбомном режиме. Программа на Silverlight, использующая ввод с клавиатуры, должна реагировать на изменения ориентации экрана, чтобы пользователь мог просматривать экран и использовать клавиатуру. Также предоставляется экранная клавиатура, которую в кругах Windows-пользователей называют Soft Input Panel (Панель функционального ввода) или Soft Input Panel (SIP). В приложениях на XNA также реализовывается работа с аппаратной клавиатурой и Soft Input Panel (SIP).

    Навигация между страницами

    Давайте рассмотрим навигацию между страницами в Windows Phone 7 Silverlight приложениях. Данная тема важна по 2 причинам. Во-первых, Windows Phone 7 приложения практически всегда состоят из нескольких страниц, а во-вторых все телефоны на Windows Phone 7 имеют аппаратную кнопку "Назад". Это позволяет пользователю легко возвращаться на предыдущую страницу. Чуть позже мы поговорим о кнопке "Назад" более подробно.

    Навигация между страницами на телефоне напоминает таковую в Web приложениях. При работе с телефоном, у нас есть больший контроль над навигацией, но с точки зрения пользователя различия минимальны. Более того, любое Silverlight приложение для Windows Phone 7 состоит как минимум из одной страницы, тогда как традиционные Silverlight приложения состоят как минимум из одного пользовательского элемента управления , внутри которого может находится фрейм для навигации между страницами.

    Создадим новое приложение, подобно тому, как делали это на прошлой лекции. Назовём его Food shop. Из названия вы поняли что это магазин еды. Давайте создадим несколько страниц с категориями еды и на главной странице сделаем ссылки на них.

    Чтобы добавить новые страницы в приложение нажмите в верхнем меню Project затем Add New Item и в открывшемся окне щёлкните на Windows Phone Portrait Page далее Add.

    (рис 3.3) Добавление новой страницы в приложение

    В списке файлов справа появится файлы Page1.xaml и Page1.xaml.cs, отвечающие за работу нашей страницы. Добавим ещё три страницы. Изменим на каждой странице заголовок так, чтобы пользователь смог понять на какой странице он находится.

    Перейдём к XAML коду страницы Pasta.xaml и изменим значение свойства "Text" текстового блока с именем "PageTitle" на "Овощи":

    <TextBlock x:Name="PageTitle" Text="Овощи" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>

    У нас будут четыре страницы: овощи, фрукты, мясо, молоко.

    Изменим заголовки других страниц соответствующим образом.

    Для создания ссылок между страницами мы можем использовать несколько различных подходов. Первым из них является элемент управления "HyperlinkButton" – кнопка-ссылка. Плюс данного подхода состоит в том, что нам не требуется писать C# код для навигации, а достаточно добавить одну строку в XAML разметку.

    Перейдём к XAML коду страницы MainPage и в элемент управления Grid с именем "ContentPanel" добавим несколько ссылок, которые будут располагаться по вертикали одна за другой:

    <StackPanel>
    
                    <HyperlinkButton Content="Овощи" NavigateUri="/Page1.xaml"/>
    
                    <HyperlinkButton Content="Фрукты" NavigateUri="/Page2.xaml"/>
    
                    <HyperlinkButton Content="Мясо" NavigateUri="/Page3.xaml"/>
    
          </StackPanel>
    (рис 3.4) Добавление ссылок на другие страницы

    Запустим приложение. Попробуем нажать ссылку. Мы перемещаемся на созданные нами страницы.

    Вместо использования элемента управления "HyperlinkButton" мы можем перейти на другую страницу, написав некоторый код на языке C#. Остановите отладку программы (Shift + F5). Давайте добавим после ссылок на странице MainPage.xaml кнопку:

    <Button Content=" Молоко" />

    Двойным кликом по кнопке в дизайнере перейдём к обработчику события нажатия данной кнопки:

    private void Button_Click(object sender, RoutedEventArgs e)

    Добавим код для перехода на другую страницу:

    NavigationService.Navigate(new Uri("/Page4.xaml", UriKind.Relative));
    

    Здесь используется специальный класс NavigationService, с помощью методов которого мы можем программно управлять навигацией: GoBack переходит к последней записи журнала переходов назад или создает исключение, если в журнале переходов назад нет записей.

  • GoForward Переходит к последней записи журнала переходов вперед или создает исключение, если в журнале переходов вперед нет записей.
  • Navigate Переходит к содержимому, заданному универсальным кодом ресурса (URI).
  • Refresh Перезагрузка текущей страницы.
  • StopLoading Останавливает еще не обработанные асинхронные переходы.
  • Запустите приложение, нажмите на кнопку, и вы перейдёте на нужную страницу

    (рис 3.5) Наше приложение

    Аппаратная кнопка "Назад"

    Давайте рассмотрим, как мы ещё можем использовать класс NavigationService для перехода на другую страницу из C# кода. Аппаратная кнопка "Назад" (Back) на телефоне была кратко упомянута, так как она просто работает, и для её работы в стандартном режиме нам ничего делать не требовалось. Однако данная тема заслуживает отдельного рассмотрения, так как мы можем обработать нажатие и переопределить то, что делает кнопка "Назад".

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

    Для примера:

  • Запустим наше приложение.
  • Нажмём на кнопку "Старт".
  • Откроем настройки телефона.
  • Ещё раз нажмём на "Start".
  • Ещё раз запустим наше приложение.
  • Теперь нажимая несколько раз кнопку "Назад" мы можем увидеть всё, с чем мы работали в обратном порядке.

    Переопределение функциональности кнопки "Назад"

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

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

    Есть несколько правил обработки нажатия кнопки "назад":

  • Нажатие кнопки должно означать для пользователя возвращение в состояние предшествующее текущему.
  • Если пользователь нажимает кнопку "назад" второй раз подряд, следует совершить стандартное действие.
  • Использование кнопки "назад" для паузы в игре является прекрасной идеей, но если пользователь нажимает данную кнопку второй раз, значит, он действительно хочет перейти назад, а не поставить игру на паузу.
  • Откроем пример из предыдущей статьи и на странице Page1.xaml и изменим событие происходящее при нажатии кнопки "Назад".

    Для этого в C# коде (файл Page1.xaml.cs) после кода

    public Page1()
            {
                InitializeComponent();
            }
    

    добавим:

    protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
            {
                NavigationService.Navigate(new Uri("/page4.xaml", UriKind.Relative));
                e.Cancel = true; 
            }

    В данном примере при нажатии кнопки "назад" мы перейдём на заданную страницу - page4.xaml, для этого мы использовали метод NavigationService.Navigate в котором указали ссылку перехода и следующей строчкой e.Cancel = true отменили действие кнопки "по умолчанию".

    Запустите приложение и проверьте его работу.

    Ключевые термины

    Soft Input Panel (SIP)— Панель функционального ввода, также называемая экранной клавиатурой. Позволяет вводить текстовую информацию при помощи сенсорного экрана.

    Органический светодиод (англ. Organic Light-Emitting Diode (OLED) органический светоизлучающий диод (ОСИД)) — полупроводниковый прибор, изготовленный из органических соединений, который эффективно излучает свет, если пропустить через него электрический ток.

    Краткие итоги

    В данной лекции мы узнали, что:

  • устройства создаваемые под работу с Windows Phone 7 будут иметь схожую конфигурацию и соответствовать минимальным требованиям;
  • изначально планируется выпуск устройств с разрешениями:
  • 480x800;
  • 320x480;
  • на любом устройстве для Windows Phone 7 на панели будет минимум три кнопки, это:
  • Back (Назад) ;
  • Start (Пуск) ;
  • Search (Поиск);
  • Также мы научились создавать навигацию между страницами и переопределять действие, при нажатии кнопки "Назад".

    Набор для практики

    Упражнения

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

    Вернуться к учебному плану