2010-07-25 24 views
69

Tengo una aplicación que funciona solo en modo vertical, y he realizado los cambios en mi archivo de manifiesto para cada actividad, la orientación es vertical. Pero cuando giro el dispositivo, la actividad vuelve a crearse. ¿Cómo no destruir la actividad?Android, ¿cómo no destruir la actividad cuando giro el dispositivo?

+1

Esto a menudo se aconseja en contra, podría intentar establecer la orientación de las aplicaciones mediante programación con algo como: setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); – stealthcopter

+7

¿Por qué sería contra? Digamos que tenemos un servicio que tarda 2 segundos en ejecutarse. Si la actividad se destruye cada vez, ese servicio se mantiene en funcionamiento cada vez que solo necesito que se ejecute una vez. –

Respuesta

114

Para API 12 y por debajo de: añadir

android:configChanges="orientation" 

Agregar "ScreenSize" si se dirigen a API 13 o por encima de porque cada vez que cambia su orientación también lo hace el tamaño de la pantalla, de lo contrario los nuevos dispositivos continuarán para destruir tu actividad Véase la respuesta de huevo a continuación para obtener más información sobre el uso de "ScreenSize"

android:configChanges="orientation|screenSize" 

a su actividad en AndroidManifest.xml. De esta forma, tu Actividad no se reiniciará automáticamente. Consulte the documentation para obtener más información

+0

La actividad se reinicia nuevamente. No sé de qué sirve hacer todo lo que se debe hacer cuando la actividad gira, incluso si no está girando virtualmente. ¿Hay alguna manera de desactivar los mensajes que el sensor envía al sistema operativo sobre la rotación, o algo así, para solucionar este problema desde su raíz? – Vasil

+6

en qué dispositivo estás programando? recuerde que, por ejemplo, deslizar el teclado también podría reiniciar su actividad ... (si ese es el motivo, configure confChanges para "teclado | teclado | orientación oculta") –

+1

esta es la respuesta correcta muchas gracias –

100

Desde el flurin documento oficial dijo,

Nota: Si su aplicación se dirige a nivel de la API 13 o superior (según lo declarado por el minSdkVersion y atributos targetSdkVersion), entonces usted debe también declarar la "ScreenSize "configuración, porque también cambia cuando un dispositivo cambia entre orientaciones vertical y horizontal.

Así que si sus objetivos de aplicaciones API de nivel 13 o superior, se debe configurar esta configuración en su lugar:

android:configChanges="orientation|screenSize"

+4

¡Muchas gracias! Todas las demás respuestas se pierden esta parte en la que el nivel 13 de la API presenta este tamaño de pantalla. ¡Acabas de salvar mi vida! :) –

+1

@egg Gracias youuuuuuu! :) ¡Esto ayudó! – KarenAnne

+0

muchas gracias @egg. He estado luchando con esto ... – sampath

8

La solución correcta es

androide: configChanges = "orientación | ScreenSize"

Documentación de Android:

El tamaño de pantalla actual disponible ha cambiado. Esto representa un cambio en el tamaño disponible actualmente, relativo a la relación de aspecto actual, por lo que cambiará cuando el usuario cambie entre paisaje y retrato. Sin embargo, si su aplicación se dirige al nivel API 12 o inferior, su actividad siempre maneja esta configuración por sí misma (este cambio de configuración no reinicia su actividad, incluso cuando se ejecuta en un dispositivo con Android 3.2 o superior).

-1

de escritura en el manifiesto:

android:configChanges="orientation|screenSize|keyboardHidden" 

y anular este en actividad que resuelve su problema:

@Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
} 
+1

¿Por qué anular el método onConfigurationChanged y llamar a la implementación original para hacer algo útil? – ricosrealm

0

me estaba metiendo esto para un poco y luego relized que dentro del archivo de manifiesto Estaba poniendo los configChanges en el nivel de la aplicación y no en el nivel de actividad. Aquí es cómo se ve el código cuando funciona correctamente para mí.

Image of correct manifest files code

+1

Debe compartir el código dentro de su publicación en lugar de una imagen. –

+0

** [editar] ** su publicación y mostrar el código de manifiesto real como texto en lugar de capturas de pantalla. Otros no pueden copiar y pegar desde sus imágenes. [Ver aquí] (https://meta.stackoverflow.com/a/285557/1402846) para más detalles. Gracias. – Pang

Cuestiones relacionadas