Определение ориентации экрана в onCreate() в Android
Пройдите тест, узнайте какой профессии подходите
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы
Быстрый ответ
Вашему вниманию предлагается простой код, который позволит определить текущую ориентацию экрана:
int orientation = getResources().getConfiguration().orientation;
boolean isPortrait = orientation == Configuration.ORIENTATION_PORTRAIT;
boolean isLandscape = orientation == Configuration.ORIENTATION_LANDSCAPE;
Переменные isPortrait
и isLandscape
отображают текущий режим отображения.
Угол поворота: Дополнительная деталь
Чтобы узнать угол поворота устройства, используйте следующий код:
int rotation = getWindowManager().getDefaultDisplay().getRotation();
switch(rotation) {
case Surface.ROTATION_0:
case Surface.ROTATION_180:
// Обработка портретного режима
break;
case Surface.ROTATION_90:
case Surface.ROTATION_270:
// Обработка альбомного режима
break;
}
Подстройка макета: Ролик портного
Адаптируйте дизайн под ориентацию устройства с помощью метода onCreate()
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
adjustLayout(getResources().getConfiguration().orientation);
}
private void adjustLayout(int orientation) {
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
setContentView(R.layout.activity_main_portrait);
} else {
setContentView(R.layout.activity_main_landscape);
}
}
Динамическое обновление: Стратегия хамелеона
Обновите макеты динамически при изменении ориентации:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
adjustLayout(newConfig.orientation);
}
При этом, не забудьте включить в манифест android:configChanges="orientation|screenSize"
.
Определение ориентации: Стратегия в стиле Шерлока Холмса
Определение ориентации может быть выполнено через сравнение ширины и высоты экрана:
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
boolean isPortrait = size.y > size.x;
boolean isLandscape = size.x > size.y;
Учет сложных случаев: Стратегия "ниндзя"
- Обратите внимание, что некоторые устройства не вызывают
onConfigurationChanged
, такие случаи следует обрабатывать вonCreate
. - Изменение ориентации может привести к пересозданию активности.
- Для предотвращения потери данных следует сохранять текущее состояние.
Визуализация
Можно воспринимать ваше приложение как корабль, уверенно плывущий между:
🌍🔄🧭 Портрет -- узкими проливами (🗼) 🌍🔄🧭 Альбом -- просторами открытого моря (🏰)
int orientation = getResources().getConfiguration().orientation;
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
// 🗼 Навигация через проливы
} else {
// 🏰 Навигация по просторам морей
}
Полезные материалы
- ActivityInfo | Android Developers: Официальная документация по ориентации экрана на Android.
- Handle configuration changes | Android Developers: Руководство по обработке изменений в конфигурации.
- Android application and activity life cycle – Tutorial: Обзор жизненного цикла Android-приложений.
- Tutorial | DigitalOcean: Инструкция по управлению ориентацией экрана на Android.
- Handling Configuration Changes | CodePath Android Cliffnotes: Курс обучения, посвященный обработке изменений в конфигурации.