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

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

Ответ 1

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

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

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

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

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

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

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

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

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

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

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

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

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

Ответ 2

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

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

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

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

(ПРЕДУПРЕЖДЕНИЕ: поскольку я разместил эту ссылку, DevX установил регистрационную стену.)

Ответ 3

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

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

Вот xml:

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

Ответ 4

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

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

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

Ответ 5

<activity  android:screenOrientation="portrait"></activity>

Ответ 6

Добавьте это в действие:

android:configChanges="orientation|screenSize"

Ответ 7

Вы хотите прочитать текущую ориентацию и сохранить ее таким образом на протяжении всего жизненного цикла, так что я сделал следующее, в конце 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);