Google Analytics

miércoles, 12 de septiembre de 2012

Tips Android: ¿Tu aplicación se para cuando rotas la pantalla?

Buenos días a todos :-)

Resulta que estaba trabajando en un proyecto para dispositivos móviles multiplataforma, y tras hacer algunas pruebas en terminales de Apple le tocaba el turno a los de Android. Cuando parecía que todo estaba perfecto, le doy la vuelta a la tableta y la aplicación se para saliendo de nuevo al escritorio. Tras poner cara de panoli y acordarme de la madre de todo el que estuviese cerca, me toco buscar el problema.

Parece ser que no soy el único al que le ha pasado esto, gracias a Dios. Todo el problema se encuentra en el fichero AndroidManifest.xml, ¿en qué otro lugar iba a estar? :-)

Generalmente para que la pantalla pueda rotar basta que en nuestra aplicación configuremos la propiedad android:configChanges con el valor orientation.



Pero esto solo funciona hasta la versión 12 de la API de Android. A partir de la 13, que casualmente corresponde a Honeycomb al igual que la 12, para rotar se produce un cambio de tamaño que hay que permitir manualmente. En anteriores versiones esto se gestionaba automáticamente, ahora hay que indicarlo de forma explicita añadiendo screenSize a la propiedad android:configChanges



Como apunte final, puede ser que el compilador te diga que hay un error cuando incluyes la opción screenSize, pero es falso, no te dejes engañar ;-)

13 comentarios:

JxDarkAngel dijo...

Gracias por la info

yomismo dijo...

Gracias. Lo mismo lo había encontrado pero el por qué de ello no. Y la verdad no me gusta escribir código que no sé que hace ;)

Yeray Darias Camacho dijo...

Me alegro que la entrada te haya ayudado :-)

Es una buena práctica la de no escribir código que no se sabe lo que hace.

Yeray Darias Camacho dijo...

Me alegra saber que la entrada te ha sido útil :-)


Es una buena práctica eso de no escribir código que no se sabe lo que hace.

Teksukamen dijo...

android:configChanges="orientation|screenSize|keyboardHidden" era la linea que necesita, ahora mi aplicación no se reinicia al hacer el giro, gracias desde LIma-Perú

Carlos Jug dijo...

Muchas gracias por el tip andaba con el mismo problema. Desde que puse el targetSdkVersion para cumplir con todo lo que se recomienda al publicar la aplicación.

Yeray Darias Camacho dijo...

De nada Carlos. Me alegro mucho que te haya servido de ayuda :-)

Yeray Darias Camacho dijo...

Gracias a ti por leerme :-)

Yeray Darias Camacho dijo...

De nada, es un placer :-)

Andrew dijo...

Mi aplicación es un cronometro en la cual tengo que adivinar un número random, Yo tengo en el oncreate los botones.setenable(false) , los editText vacio y setenable(false), Al hacer click al botón (empieza) el chronometer .start() y todo queda setenable(true) y empiezo a introducir números, luego le doy a un botón para saber si es correcto y si no es correcto me borra el edittext y sigo poniendo números, Si pongo un número y le doy ctrl + f11 (rotar pantalla) los botones vuelven a su estado original setenable(false) al igual que el edittext. Si alguien ha podido resolverlo, pues por favor que lo explique. Un saludo muy cordial

Andrew

kiu dijo...

Muchas gracias por la ayuda!!!

Gerson dijo...

Me funcionó!!! Gracias..!!!

Yeray Darias Camacho dijo...

Hola Héctor.


Pues la verdad es que no tengo datos suficientes para poder ayudarte, necesitaría una descripción más completa y algo de código. Aunque haciendo eso probablemente te puedan ayudar de forma más eficaz en stackoverflow.com :-)


Date cuenta que este tip es tan sólo para forzar el repintado al rotar, pero no necesariamente afecta al layout que se está utilizando. Lamento no poder ayudarte mucho más pero tengo más experiencia en aplicaciones híbridas que nativas de Android :-S


Un saludo.