Определение ориентации экрана в onCreate() в Android

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Вашему вниманию предлагается простой код, который позволит определить текущую ориентацию экрана:

Java
Скопировать код
int orientation = getResources().getConfiguration().orientation;
boolean isPortrait = orientation == Configuration.ORIENTATION_PORTRAIT;
boolean isLandscape = orientation == Configuration.ORIENTATION_LANDSCAPE;

Переменные isPortrait и isLandscape отображают текущий режим отображения.

Кинга Идем в IT: пошаговый план для смены профессии

Угол поворота: Дополнительная деталь

Чтобы узнать угол поворота устройства, используйте следующий код:

Java
Скопировать код
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():

Java
Скопировать код
@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);
    }
}

Динамическое обновление: Стратегия хамелеона

Обновите макеты динамически при изменении ориентации:

Java
Скопировать код
@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    adjustLayout(newConfig.orientation);
}

При этом, не забудьте включить в манифест android:configChanges="orientation|screenSize".

Определение ориентации: Стратегия в стиле Шерлока Холмса

Определение ориентации может быть выполнено через сравнение ширины и высоты экрана:

Java
Скопировать код
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.
  • Изменение ориентации может привести к пересозданию активности.
  • Для предотвращения потери данных следует сохранять текущее состояние.

Визуализация

Можно воспринимать ваше приложение как корабль, уверенно плывущий между:

🌍🔄🧭 Портрет -- узкими проливами (🗼) 🌍🔄🧭 Альбом -- просторами открытого моря (🏰)

Java
Скопировать код
int orientation = getResources().getConfiguration().orientation;
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
    // 🗼 Навигация через проливы
} else {
    // 🏰 Навигация по просторам морей
}

Полезные материалы

  1. ActivityInfo | Android Developers: Официальная документация по ориентации экрана на Android.
  2. Handle configuration changes | Android Developers: Руководство по обработке изменений в конфигурации.
  3. Android application and activity life cycle – Tutorial: Обзор жизненного цикла Android-приложений.
  4. Tutorial | DigitalOcean: Инструкция по управлению ориентацией экрана на Android.
  5. Handling Configuration Changes | CodePath Android Cliffnotes: Курс обучения, посвященный обработке изменений в конфигурации.
Свежие материалы