Как заставить приложение игнорировать изменение ориентации экрана?
есть ли способ заставить приложение полностью игнорировать изменение ориентации экрана?
7 ответов:
можно довольно легко переопределить поведение по умолчанию и запретить изменение ориентации экрана, когда клавиатура открыта/закрыта.
изменение манифеста
откройте манифест, перейдите на вкладку приложение и выберите нужное действие, которое вы хотите переопределить для поведения изменения ориентации.
в атрибутах необходимо изменить два поля: Ориентация экрана: выберите либо портрет, либо пейзаж - в зависимости от желаемого. Это будет макет по умолчанию.
выберите события для изменений конфигурации, которые вы хотите переопределить: В данном случае это 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"/>`
в этом случае вы должны установить свойство для каждой операции. Я не нашел встроенного решения для всех приложений.
вы хотите прочитать текущую ориентацию и сохранить ее таким образом на протяжении всей жизни активности, поэтому я сделал следующее, В конце 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);