Как обнаружить изменения ориентации, но позволить Android справиться с ними?


person NullPointerException    schedule 17.08.2016    source источник


Ответы (1)


Чтобы обнаружить вращение Действия, не мешая его ходу, вы можете сделать следующее:

@Override
public void onConfigurationChanged(Configuration config) {
    super.onConfigurationChanged(config);
    // Check for the rotation
    if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "LANDSCAPE", Toast.LENGTH_SHORT).show();
    } else if (config.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "PORTRAIT", Toast.LENGTH_SHORT).show();
    }
}

Кроме того, вам нужно убедиться, что в вашем манифесте ваша активность разрешает configChanges для ротации

<activity android:name=".MyActivity"
          android:configChanges="orientation|keyboardHidden"
          android:label="@string/app_name">

Важно . Начиная с Android 3.2 и более поздних версий (API 13+) "размер экрана" также изменяется, когда устройство переключается между книжной и альбомной ориентацией. Если вы хотите предотвратить перезапуск среды выполнения из-за изменения ориентации при разработке для этого конкретного уровня API (13+), обязательно объявите: android:configChanges="orientation|screenSize"

-- // --

ИЗМЕНИТЬ

Используя атрибут configChanges, ваша активность не будет воссоздана при изменении конфигурации.

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

Android:configChanges

Перечисляет изменения конфигурации, которые действие обработает само. Когда изменение конфигурации происходит во время выполнения, действие закрывается и перезапускается по умолчанию, но объявление конфигурации с этим атрибутом предотвратит перезапуск действия. Вместо этого действие продолжает работать, и вызывается его метод onConfigurationChanged().

Что вы можете сделать, так это управлять вращением с помощью флага, и если вызывается onConfigurationChanged(), вы можете сами вызвать Activity onCreate(). Если нет, onCreate() будет вызываться только при первом создании экземпляра Activity.

person Ricardo Vieira    schedule 17.08.2016
comment
пожалуйста, прочитайте мой вопрос. Мне нужно, чтобы изменение активности обрабатывалось андроидом. я думаю вы не поняли мой вопрос - person NullPointerException; 17.08.2016
comment
# 1 Мне нужно, чтобы Android обрабатывал изменения ориентации, потому что я хочу воссоздать активность. - Вызывая onConfigurationChanged и передавая конфигурацию конструктору super(), вы НЕ запрещаете Android обрабатывать изменения ориентации. Еще справится. # 2 Но также мне нужно определить, когда было произведено изменение ориентации. - с помощью этого переопределенного метода вы можете обрабатывать ориентацию Android и в то же время использовать аргумент «config», чтобы проверить, было ли это вращение для альбомной или портретной ориентации. Если это не то, что вы имели в виду, извините - person Ricardo Vieira; 17.08.2016
comment
oncreate не вызывается, даже если я вызываю конструктор super() этого метода - person NullPointerException; 17.08.2016