Главная > Windows Phone 7 > 45 дней с Windows Phone 7. День #4. Ориентация экрана.

45 дней с Windows Phone 7. День #4. Ориентация экрана.

<< День #3. Аппаратная кнопка «Назад» | День #5. Системная тема >>

Это четвёртая статья серии «45 дней с Windows Phone 7».

Вчера мы говорили об аппаратной кнопке «Назад», которая присутствует на каждом телефоне под управлением Windows Phone 7. Сегодня же мы поговорим об ориентации экрана – ещё одном важном аспекте разработки приложений для телефона, сильно завязанном на аппаратные возможности.

Портретная и ландшафтная ориентации экрана.

Пользователи держат телефоны по-разному. При этом в зависимости от того, как они его держат, может меняться ориентация экрана. Вертикальная ориентация, когда высота экрана больше его ширины, является портретной (Portrait). Ландшафтная ориентация (Landscape) – это когда телефон повёрнут и ширина экрана больше его высоты. Вы можете создавать приложения, работающие при любой ориентации экрана, но по умолчанию Windows Phone 7 Silverlight приложения запускаются в портретной ориентации. При этом игры, написанные на XNA, запускаются в ландшафтной ориентации (считается, что игры выглядят лучше на широком экране). В данной статье мы сосредоточимся на Silverlight приложениях и рассмотрим ситуацию, когда ориентация экрана меняется в процессе работы приложения.

Главная страница по умолчанию работает только в портретном режиме

После создания нового проекта Windows Phone Silverlight приложения в XAML коде страницы MainPage.xaml можно найти следующий отрывок:

SupportedOrientations="Portrait" Orientation="Portrait"

Это значит, что страница декларирует поддержку только портретной ориентации, в которой, собственно, и работает. Свойство SupportedOrientations может принимать одно из следующих значений:

  • Portrait (по умолчанию)
  • Landscape
  • PortraitOrLandscape

Данные значения интуитивно понятны.

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

  • Landscape
  • LandscapeLeft (телефон опрокинут на левый бок)
  • LandscapeRight (телефон опрокинут на правый бок)
  • Portrait
  • PortraitDown (нормальная вертикальная позиция)
  • PortraitUp (телефон перевёрнут)

Из списка видно, что можно задать не только портретную или ландшафтную ориентацию, но и то, в какую сторону будет повёрнут телефон при той или иной ориентации. Это позволяет очень четко указать с какой ориентацией будет запускаться страница.

Изменение ориентации экрана

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

Допустим, мы пишем приложение-калькулятор. В ландшафтной ориентации многие кнопки не видны за границей экрана.

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

Скачайте пример к данной статье, и в C# коде страницы MainPage найдите следующие строки:

public MainPage()
{
	InitializeComponent();
	this.OrientationChanged +=
           new EventHandler(MainPage_OrientationChanged);
}

void MainPage_OrientationChanged(object sender, OrientationChangedEventArgs e)
{
	if ((e.Orientation == PageOrientation.LandscapeRight)
           ||(e.Orientation == PageOrientation.LandscapeLeft))
	{
		TitlePanel.Visibility = Visibility.Collapsed;
	}
	else if ((e.Orientation == PageOrientation.PortraitDown)
           ||(e.Orientation == PageOrientation.PortraitUp))
	{
		TitlePanel.Visibility = Visibility.Visible;
	}
}

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

Запустим пример и попробуем сменить ориентацию экрана.

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

Пример кода.

Хотя интерфейс приложения и напоминает калькулятор, калькулятором приложение не является, так как данная функциональность в нём не реализована.

  1. Ku6opr
    18 Ноябрь 2010 в 20:01 | #1

    У меня при смене ориентации клавиатура начинает неправильно отрисовываться (боком и половина не вмещается на экране). На других сайтах советуют выключить аппаратную клавиатуру Pause/Break, но мне это не помогает. Может быть есть какие-то известные способы устранения данной проблемы?

  1. Пока что нет уведомлений.
Необходимо войти на сайт, чтобы написать комментарий.