Есть ли способ сделать приложение полностью игнорировать изменение ориентации экрана?
Как заставить приложение игнорировать изменение ориентации экрана?
Ответ 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);