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


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

7 67

7 ответов:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

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

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

(предупреждение: поскольку я опубликовал эту ссылку, DevX поставил регистрационную стену.)

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

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

здесь XML-код:

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

вы можете определить свою деятельность в AndroidManifest.xml файл:

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

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

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

добавьте это в упражнение:

android:configChanges="orientation|screenSize"

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