Sobes.tech
Back to questions
Middle
205
questionbank

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

Sobes Copilot

Get answers in real time

Answer from AI

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" />
    

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