Acabo de implementar una función de cambio de orientación, por ejemplo, cuando el diseño cambia de vertical a horizontal (o viceversa). ¿Cómo puedo detectar cuándo terminó el evento de cambio de orientación?
El OrientationEventListener
no funcionó. ¿Cómo puedo recibir notificaciones sobre eventos de cambio de orientación de diseño?
Respuestas:
Utilice el método de actividad onConfigurationChanged . Vea el siguiente código:
También tienes que editar el apropiado en su archivo de manifiesto para incluir android: configChanges Solo vea el código a continuación:
NOTA: con Android 3.2 (API nivel 13) o superior, el "tamaño de la pantalla" también cambia cuando el dispositivo cambia entre la orientación vertical y horizontal. Por lo tanto, si desea evitar que el tiempo de ejecución se reinicie debido a un cambio de orientación al desarrollar para el nivel de API 13 o superior, debe declarar android: configChanges = "orientación | screenSize" para el nivel de API 13 o superior .
Espero que esto te ayudará... :)
fuente
Para cargar el diseño de la disposición en tierra medios de carpeta que tiene dos diseños separados entonces usted tiene que hacer
setContentView
en elonConfigurationChanged
método.Si solo tiene un diseño, entonces no es necesario crear setContentView en este método. simplemente
fuente
onConfigurationChanged(Configuration newConfig)
método (como en esta respuesta), pero en lugar de manejarlo yo mismo, configuré una bandera booleana y luego llamé alrecreate()
método para que Android recreara la actividad en su forma normal.recreate()
método es que hace que la pantalla parpadee en negro brevemente. Por esta razón, utilicé otro enfoque: (1) guardar el ancho de la pantalla en elonCreate(...)
, (2) comparar el ancho de la pantalla guardado con el ancho de la pantalla actual en cualquier método de ciclo de vida cuando se termina la actividad (por ejemploonSaveInstanceState(...)
).Solo quería mostrarte una forma de guardar todo tu Bundle después de onConfigurationChanged:
Crea un nuevo paquete justo después de tu clase:
A continuación, después de "protected void onCreate", agregue esto:
Si agrega esto, todas sus clases creadas en MainActivity se guardarán.
Pero la mejor manera es agregar esto en su AndroidManifest:
fuente
onConfigurationChanged()
hace que su instanceState no se destruya cuando cambia la orientación, por lo que no tiene que guardarlo. Es posible que desee guardarlo para otros eventos en el ciclo de vida de la actividad, pero no lo sé.usa este método
Y no olvide agregar esto en su Androidmainfest.xml
Me gusta esto
fuente
Anular el método de la actividad onConfigurationChanged
fuente
Solo quiero proponer otra alternativa que interesará a algunos de ustedes, de hecho, como se explicó anteriormente:
implica que declaramos explícitamente el diseño que se inyectará.
Por si queremos mantener la inyección automática gracias a las carpetas layout-land y layout. Todo lo que tienes que hacer es agregarlo a onCreate:
Aquí mostramos o no la barra de acciones según la orientación del teléfono
fuente
Cree una instancia de
OrientationEventListener
clase y habilítela.fuente
Si la respuesta aceptada no funciona para usted, asegúrese de no haber definido en el archivo de manifiesto:
Cual es mi caso.
fuente
En caso de que esto sea útil para algunos desarrolladores más nuevos porque no está especificado anteriormente. Solo para ser muy explícito:
Necesita dos cosas si usa onConfigurationChanged :
Un
onConfigurationChanged
método en tu clase de actividadEspecifique en su manifiesto qué cambios de configuración serán manejados por su
onConfigurationChanged
métodoEl fragmento de manifiesto en las respuestas anteriores, aunque sin duda es correcto para la aplicación en particular a la que pertenece el manifiesto, NO es exactamente lo que necesita agregar en su manifiesto para activar el método onConfigurationChanged en su Clase de actividad. es decir, la entrada de manifiesto a continuación puede no ser correcta para su aplicación.
En la entrada de manifiesto anterior, hay varias acciones de Android para las
android:configChanges=""
que pueden activar onCreate en el ciclo de vida de su actividad.Esto es muy importante: los que NO están especificados en el manifiesto son los que activan su onCreate y los especificados en el manifiesto son los que activan su
onConfigurationChanged
método en su Clase de actividad.Por lo tanto, debe identificar qué cambios de configuración debe manejar usted mismo. Para los con desafíos enciclopédicos de Android como yo, utilicé la ventana emergente de sugerencias rápidas en Android Studio y agregué casi todas las opciones de configuración posibles. Enumerar todos estos básicamente decía que yo manejaría todo y nunca se llamará a onCreate debido a las configuraciones.
Ahora, obviamente, no quiero manejar todo, así que comencé a eliminar las opciones anteriores una a la vez. Reconstruir y probar mi aplicación después de cada eliminación.
Otro punto importante : si solo hay una opción de configuración que se maneja automáticamente y que activa su onCreate (no la tiene enumerada en su manifiesto anterior), entonces parecerá que
onConfigurationChanged
no está funcionando. Debes poner todos los relevantes en tu manifiesto.Terminé con 3 que estaban activando onCreate originalmente, luego probé en un S10 + y todavía estaba recibiendo el onCreate, así que tuve que hacer mi ejercicio de eliminación nuevamente y también necesitaba el
|screenSize
. Así que prueba en una selección de plataformas.Entonces mi sugerencia, aunque estoy seguro de que alguien puede hacer agujeros en esto:
Agregue su
onConfigurationChanged
método en su clase de actividad con un TOAST o LOG para que pueda ver cuándo está funcionando.Agregue todas las opciones de configuración posibles a su manifiesto.
Confirma que tu
onConfigurationChanged
método funciona probando tu aplicación.Elimina cada opción de configuración de tu archivo de manifiesto una a la vez, probando tu aplicación después de cada una.
Pruebe en la mayor variedad de dispositivos posible.
No copie / pegue mi fragmento anterior en su archivo de manifiesto. Las actualizaciones de Android cambian la lista, así que use las sugerencias emergentes de Android Studio para asegurarse de obtenerlas todas.
Espero que esto le ahorre a alguien algo de tiempo.
Mi
onConfigurationChanged
método solo para obtener información a continuación.onConfigurationChanged
se llama en el ciclo de vida después de que la nueva orientación esté disponible, pero antes de que se haya vuelto a crear la interfaz de usuario. Por lo tanto, el primeroif
en verificar que la orientación funciona correctamente, y luego el segundo anidadoif
para ver la visibilidad de mi UI ImageView también funciona correctamente.fuente
para la implementación de Kotilin en la forma más simple: solo se activa cuando la pantalla cambia de retrato <--> paisaje si necesita un dispositivo de detección de volteo (180 grados), deberá tabular los valores del sensor de gravedad
fuente