OnConfigurationChanged no se llama

Esta mañana me surgió un problema al tratar de manejar el evento onConfigurationChanged . El problema es que el método, que anule, no se llama cuando cambio la orientación del teléfono. No ser llamado en absoluto.

He puesto android:configChanges="orientation" sobre la actividad definida en el manifiesto como se menciona en la documentación de Android, pero esto no hace ninguna diferencia.

¿Ha surgido este problema?

Este fue mi gremlin para el mismo problema:

Precaución: A partir de Android 3.2 (API nivel 13), el "tamaño de pantalla" también cambia cuando el dispositivo cambia entre orientación vertical y horizontal. Por lo tanto, si desea evitar que el tiempo de ejecución se reinicie debido al cambio de orientación al desarrollar para API de nivel 13 o superior (como declarado por los atributos minSdkVersion y targetSdkVersion), debe incluir el valor "screenSize" además del valor "orientation". Es decir, debes decalar android: configChanges = "orientation | screenSize". Sin embargo, si su aplicación se orienta al nivel de API 12 o inferior, su actividad siempre se encarga de este cambio de configuración (este cambio de configuración no reinicia su actividad, incluso cuando se ejecuta en un dispositivo Android 3.2 o superior).

(De http://developer.android.com/guide/topics/resources/runtime-changes.html )

TL; DR: agregue "| screenSize" a configChanges al orientar el API nivel 13+

Algunos dispositivos de 4.0 no llaman aConfigurationChanged. Sólo tiene que añadir un oyente a screenSize también.

 android:configChanges="orientation|screenSize" 

El problema era que si usas este método

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

Para forzar la orientación de su Activity al modo retrato, no es candidato para recibir cambios de orientation .

Así que la solución es no establecerRequestOrientation a un modo particular. En su lugar, utilice SCREEN_ORIENTATION_SENSOR.

Compruebe que su dispositivo tiene el ajuste "Rotación de pantalla" activado

Ajuste de "Rotación de pantalla"

  1. Compruebe que no esté utilizando android:screenOrientation en una Activity o en un nivel de Application .
  2. Intente usar android:configChanges="orientation|keyboardHidden" lugar.

Macarse es 100% en el dinero con su segunda opción.

Pruebe con android:configChanges="orientation|keyboardHidden|screenSize"

Tuve exactamente el mismo problema, y ​​en el emulador de 1,6 añadir causas keyboardHidden onConfigurationChanged a ser llamado durante la rotación. Quita y deja de ser llamado.

Pasé decenas de minutos para averiguar por qué no funcionó. He añadido screenSize pero todavía no funcionó.

Resultó que había añadido android:configChanges al elemento <application> , no al elemento <activity> como debería tener!

Bueno, por supuesto, este fue mi error, pero todos sabemos que todos pasamos mucho tiempo para este tipo de error tonto. Por lo tanto, estoy añadiendo esta respuesta en caso de que debe haber otro programador tonto como yo.

Tuve el mismo problema – onConfigurationChanged no fue llamado cuando el dispositivo cambió de orientación a pesar de tener android:configChanges="orientation|keyboardHidden" en el archivo de manifiesto. Utilicé el código cortado compartido por Deva aquí

La orientación no está funcionando en 2.3.3?

Para comprobar si onConfigurationChanged se estaba llamando. No era.

Después de unas pocas horas de experimentación, me di cuenta de que tenía las siguientes líneas en el archivo de manifiesto

 <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15"/> 

Y al cambiar android:targetSdkVersion="15" a android:targetSdkVersion="8" , onConfigurationChanged comenzó a ser llamado. Por lo tanto, parte del manifiesto por fin se parecía a esto

 <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8"/> 
 <uses-sdk android:minSdkVersion="8" android:maxSdkVersion="17" /> 

No utilice ninguna versión sdk de destino para hacerle complicación. Y para todos los niveles de api usar esto como oyente de cambio de configuración

 android:configChanges="orientation|keyboardHidden|screenLayout" 

No estoy seguro de que este es el mejor lugar para él, pero al encontrar este problema – he observado algo interesante.

Si el oyente onConfigurationChanged () NO está funcionando, entonces onCreate () se llama de nuevo cada vez que se cambia la orientación.

Si el oyente onConfigurationChanged () está funcionando, entonces ese método se llama en lugar de onCreate () cuando cambia la orientación.

Acabo de encontrar que si usted tiene:

 android:screenOrientation="landscape" 

En el manifiesto, onConfigurationChanged () no será llamado también …

Esto puede ser similar a:

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

Que el ajuste de la orientación bloquea el onConfigurationChanged ().

Todas las soluciones no funcionan util trato de eliminar mi actividad de tema en el archivo de manifiesto de Android. Tan extraña

 <activity android:name="MyActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:theme="@style/MyTheme" --> remove this line /> <style name="MyTheme" parent="Theme.AppCompat.NoActionBar"> <item name="windowNoTitle">true</item> <item name="android:windowIsTranslucent">true</item> </style> 

Tuve el mismo problema y tenía tanto "android: screenOrientation" y "android: configChanges" especificado en el manifiesto. Cuando quité primero uno, onConfigurationChanged () consigue llamado en la rotación. Extraño, pero woks)

@ Thanhbinh84 Me dio una idea de lo que podría estar causando esto.
Eliminar <item name="android:windowIsTranslucent">true</item> de mi tema en styles.xml lo arregló!

¿Tienes android.content.res.Configuration en tus declaraciones de importación? Eclipse puede insertar importaciones automáticamente si presiona Ctrl+Shift+O

Si eso falta, el compilador será incapaz de reconocer que está legítimamente anulando el método de superclase y por lo tanto lanzará un error.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.