Назад к вопросам
Middle
156
questionbank

Можно ли сделать так, чтобы активити не пересоздавалась при повороте экрана?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Да, можно. Есть два основных способа.

  1. ** Объявить configChanges в манифесте:** В AndroidManifest.xml, для <activity> добавить атрибут android:configChanges="orientation|screenSize".

    <activity
        android:name=".MainActivity"
        android:configChanges="orientation|screenSize" />
    

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

    override fun onConfigurationChanged(newConfig: Configuration) {
        super.onConfigurationChanged(newConfig)
        // Обработка изменений, например:
        // if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        //     // Изменен на альбомную ориентацию
        // } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
        //     // Изменен на портретную ориентацию
        // }
    }
    
  2. Зафиксировать ориентацию экрана: Можно установить фиксированную ориентацию для активити, добавив атрибут android:screenOrientation в манифест.

    <activity
        android:name=".MainActivity"
        android:screenOrientation="portrait" />
    

    или

    <activity  
        android:name=".MainActivity"  
        android:screenOrientation="landscape" />
    

    В этом случае ориентация активити не будет меняться вне зависимости от поворота устройства, и пересоздание не произойдет.