¿Cómo evitar el reinicio de las actividades al rotar la pantalla en Android?
- Andrés Cruz
Muchas veces al momento de probar nuestra aplicación Android que estamos desarrollando, ya sea en el emulador incorporado por el ADT o en un dispositivo físico/real; podemos ver que cuando rotamos o giramos la pantalla, las actividades se reinician, trayendo como consecuencia que:
- Se borren los textos en los campos.
- Se eliminen ciertas configuraciones o estados de las actividades.
Entre otros; esto se debe a que cuando se gira o rota la pantalla del dispositivo, el método OnCreate (que pertenece al ciclo de vida de una aplicación Android -ver ciclo de vida de las actividades en Android-) es nuevamente invocado siguiendo el ciclo de vida básico de un aplicación Android y por ende se reinicia; una pequeña sección de código en la configuración del AndroidManifest permite solventar este inconveniente, indicando cuáles actividades deseamos que se reinicien y cuales, para ello hay que agregar el siguiente atributo en el tag activity:
android:configChanges="screenSize|orientation"
Dando un pequeño ejemplo más completo de lo anteriormente explicado:
<activity android:name="com.cuc.cacu.MyTourActivity" android:configChanges="screenSize|orientation"></activity>
¿Qué significa cada uno de estos atributos?
- orientation: La orientación de la pantalla ha cambiado; o lo que es lo mismo, el usuario ha rotado la pantalla.
- screenSize: Se presenta cuando cambias la resolución o el aspecto de tu pantalla (16:9 por 9:16 por citar un ejemplo); es decir, cuando cambias entre landscape y portrait (rotas o giras la pantalla).
Más información sobre las configuraciones anteriores:
¿Por qué no configurar todas las actividades para que no se reinicien por defecto?
Depende de cómo estén configuremos nuestras actividades; como podrás saber, al momento de diseñar una actividad para múltiples resoluciones y posiciones de pantalla (landscape/portrait -ver el siguiente ejemplo en un dispositivo móvil si no sabes cual es la diferencia-) puede que necesitemos definir múltiples layouts por actividad:
Lo que significa que si deshabilitados el reinicio de una actividad que presenta múltiples layouts y rotamos (giramos) el dispositivo móvil, el layout no se actualizará.
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter