Как заставить приложение игнорировать изменение ориентации экрана? - PullRequest
67 голосов
/ 11 сентября 2009

Есть ли способ заставить приложение полностью игнорировать изменение ориентации экрана?

Ответы [ 7 ]

58 голосов
/ 11 сентября 2009

Можно довольно легко переопределить поведение по умолчанию и запретить изменение ориентации экрана при открытой / закрытой клавиатуре.

Изменение манифеста

Откройте манифест, перейдите на вкладку «Приложение» и выберите желаемое действие, которое вы хотите переопределить для поведения изменения ориентации.

  1. В атрибутах вам нужно изменить два поля: Ориентация экрана: выберите книжную или альбомную ориентацию - в зависимости от желаемого Это будет макет по умолчанию.

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

Изменение реализации действия

Теперь вам нужно переопределить одну функцию внутри требуемой операции.

Просто добавьте указанную ниже функцию в класс вашей деятельности.

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
}

Это реализация по умолчанию, если используется Source->Override/Implement Methods опция меню.

Вот и все! Теперь ваша ориентация всегда будет сохраняться.

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

(на основе SDK 1.1)

28 голосов
/ 12 сентября 2009

Вы можете сделать то же самое изменение в коде со следующей строкой (вызванной в действии):

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

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

По этой теме есть полная статья DevX в Разработка ориентированных на ориентацию приложений Android .

(ВНИМАНИЕ: с тех пор как я разместил эту ссылку, DevX установил регистрационную стену.)

21 голосов
/ 08 июля 2011

Если вы устанавливаете AndroidManifest.xml или setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);, у вас могут возникнуть проблемы с таблетками . Их естественная / стандартная ориентация - пейзаж.

Если вы действительно хотите полностью игнорировать изменения ориентации экрана Я бы использовал это значение setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);. Я больше об этом говорю в вопросе переполнения стека Справка по естественной ориентации сенсора Android .

Вот XML:

<activity 
    android:name=".MyActivity" 
    android:screenOrientation="nosensor"
    android:configChanges="orientation|keyboardHidden|keyboard"/>
14 голосов
/ 20 сентября 2010

Вы можете определить свою активность в файле AndroidManifest.xml следующим образом:

<activity 
    android:name=".MyActivity" 
    android:screenOrientation="portrait"
    android:configChanges="orientation|keyboardHidden|keyboard"/>`

В этом случае вы должны установить свойство для каждого действия. Я не нашел встроенное решение для всех приложений.

2 голосов
/ 21 мая 2015

Добавьте это к деятельности:

android:configChanges="orientation|screenSize"

2 голосов
/ 03 февраля 2012
<activity  android:screenOrientation="portrait"></activity>
1 голос
/ 14 июня 2013

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

// choose an orientation and stay in it
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
else if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...