Урок 3. Ориентация экрана устройства

Как известно, телефон или планшет пользователь может время от времени переворачивать. Так-же в настройках Android есть функция автоматического перевертывания экрана в альбомный/портретный вид в зависимости от положения устройства. Тогда часто возникает ситуация, что приложение рассчитанное на работу в портретном режиме, выглядит не функционально в альбомном режиме. Есть несколько вариантов решения данного вопроса. Первый — для альбомного и портретного режима рисовать две разные формы представления приложения. Второй — отслеживать положение устройства самостоятельно, и перерисовывать положение элементов в зависимости от ориентации. Пока рассмотрим первый вариант как самый простой.В качестве примера возьмем приложение из предыдущего урока:

Screenshot_22

 

, нажмите «Create Landscape Variation».  В левой части проекта в папке res-activity_form1 появится дополнительный файл activity_form1.xml(land).  Открыв его, увидим копию портретной формы, только в альбомом варианте расположения. Перетащим элементы так, чтобы было удобно их использовать и при данном расположении:

Screenshot_23

 

Запускаем приложение. В эмуляторе нажимаем Ctrl-F11 (поворот экрана), и наслаждаемся:

Screenshot_24 Screenshot_25

Узнать ориентацию программно

Чтобы из кода узнать текущую ориентацию, можно создать следующую функцию:

<code class="java">
private String getScreenOrientation(){    
	if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
	    return "Портретная ориентация";
	else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
		return "Альбомная ориентация";
	else
		return "";
}
</code>

Вызовите данную функцию из нужного места, например, при щелчке кнопки и узнайте текущую ориентацию. В примере использовались две распространённые системные константы для ориентации. Есть еще константа ORIENTATION_SQUARE (квадратный экран).

В какую сторону повернуто устройство?

Хорошо, мы можем определить текущую ориентацию, но в какую сторону повернули устройство? Ведь его можно повернуть влево, вправо или вообще вверх тормашками. Напишем другую функцию:

<code class="java">
private String getRotateOrientation() {
	int rotate = getWindowManager().getDefaultDisplay().getRotation();
	switch (rotate) {
	case Surface.ROTATION_0:
		return "Не поворачивали";
	case Surface.ROTATION_90:
		return "Повернули на 90 градусов по часовой стрелке";
	case Surface.ROTATION_180:
		return "Повернули на 180 градусов";
	case Surface.ROTATION_270:
		return "Повернули на 90 градусов по часовой стрелке";
	default:
		return "Не понятно";
	}
}
</code>

Установить ориентацию программно и через манифест

Если вы  хотите запустить приложение в стиле «вид сбоку», то можете сделать это программно. Разместите код в методе onCreate():

<code class="java">
import android.content.pm.ActivityInfo;

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
</code>

Вы можете запретить приложению менять ориентацию, если добавите нужный код в onCreate().

<code class="java">
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); //для альбомного режима
// или
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); //для портретного режима
</code>

Но указанный способ не совсем желателен. Лучше установить нужную ориентацию через манифест, прописав в элементе <activity> параметр android:screenOrientation:

<code class="xml">
android:screenOrientation="portrait"
android:screenOrientation="landscape"
</code>

Кстати, существует ещё один вариант, когда устройство полагается на показания сенсора и некоторые другие:

<code class="xml">
android:screenOrientation="sensor"
</code>

В статье использовались материалы с сайта  http://developer.alexanderklimov.ru/

 


Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Жизнь замечательных грибов