Simplemente no necesito nada para cambiar cuando se gira la pantalla. Mi aplicación muestra una imagen aleatoria cuando se carga por primera vez y al girar el dispositivo no debería seleccionar otra imagen aleatoria. ¿Cómo puedo (simplemente) hacer que este comportamiento se detenga?
152
Screen.lockOrientation(this)
desde github.com/delight-im/Android-BaseLib/blob/master/Source/src/im/… para esto. Permite desbloquear lo que no hace el manifiesto.Respuestas:
Generalmente hay tres formas de hacer esto:
Como sugieren algunas de las respuestas, puede distinguir los casos en que su actividad se crea por primera vez y se restaura
savedInstanceState
. Esto se hace anulandoonSaveInstanceState
y verificando el parámetro deonCreate
.Puede bloquear la actividad en una orientación agregando
android:screenOrientation="portrait"
(o"landscape"
)<activity>
en su manifiesto.Podrías decirle al sistema que querías manejar los cambios de pantalla por ti mismo especificando
android:configChanges="orientation|screenSize"
en la<activity>
etiqueta. De esta manera, la actividad no se volverá a crear, sino que recibirá una devolución de llamada (que puede ignorar ya que no es útil para usted).Personalmente iría con (3). Por supuesto, si está bien bloquear la aplicación en una de las orientaciones, también puede ir con (2).
fuente
android:configChanges="orientation|screenSize"
android:configChanges="orientation|screenSize"
funciona para mi. Gracias @Pacerierandroid:configChanges="orientation|screenSize"
valor para API> = 13, ¡porque muchas personas ven su respuesta como principal!La respuesta de Xion fue cercana, pero # 3 (
android:configChanes="orientation"
) no funcionará a menos que la aplicación tenga un nivel de API de 12 o inferior.En el nivel 13 de API o superior, el tamaño de la pantalla cambia cuando cambia la orientación, por lo que esto todavía hace que la actividad se destruya y se inicie cuando cambia la orientación.
Simplemente agregue el atributo "screenSize" como hice a continuación:
Ahora, cuando cambia la orientación (y el tamaño de la pantalla cambia), la actividad mantiene su estado y
onConfigurationChanged()
se llama. Esto mantendrá lo que esté en la pantalla (es decir, página web en una vista web) cuando cambie la orientación.Aprendí esto de este sitio: http://developer.android.com/guide/topics/manifest/activity-element.html
Además, aparentemente esta es una mala práctica, así que lea el siguiente enlace sobre Manejo de cambios en tiempo de ejecución:
http://developer.android.com/guide/topics/resources/runtime-changes.html
fuente
android:configChanges="orientation|screenSize"
Solo tiene que ir al
AndroidManifest.xml
interior o en las etiquetas de sus actividades, debe escribir esta línea de código como alguien allí dijo:Entonces, tendrás algo como esto:
¡Espero que funcione!
fuente
Solo agrega
android:configChanges="orientation|screenSize"
pestaña de actividad del archivo de manifiesto.Por lo tanto, la actividad no se reiniciará cuando cambie la orientación.
fuente
onSaveInstanceState()
yonCreate()
.Según mi experiencia, en realidad es mejor tratar los cambios de orientación correctamente en lugar de tratar de calzar un comportamiento no predeterminado.
Debe guardar la imagen que se muestra actualmente
onSaveInstanceState()
y restaurarla correctamente cuando la aplicación se ejecuteonCreate()
nuevamente.fuente
android:configChanges
debe evitarse y usarse solo como último recurso. Lea Manejo de cambios en el tiempo de ejecución para obtener más información sobre cómo manejar adecuadamente un reinicio debido a un cambio de configuración".Esta solución es, con mucho, la mejor que funciona. En su archivo de manifiesto agregue
Y en su clase de actividad agregue el siguiente código
fuente
agregue
android:configChanges="keyboardHidden|orientation|screenSize"
para todas las etiquetas de actividades de la aplicación en manifiesto.fuente
Solo agregue esto a su
AndroidManifest.xml
Quiero decir, hay una etiqueta de actividad, agregue esto como otro parámetro. En caso de que necesite orientación vertical, cambie de horizontal a vertical. Espero que esto ayude.
fuente
En múltiples archivos agregue a cada actividad esto. Esto ayudará
fuente
Todas las respuestas anteriores no me funcionan. Entonces, lo solucioné mencionando el
label
conscreenOrientation
como a continuación. Ahora todo bienfuente
http://animeshrivastava.blogspot.in/2017/08/activity-lifecycle-oncreate-beating_3.html
fuente
Guarde los detalles de la imagen en su
onPause()
oonStop()
y úselo enonCreate(Bundle savedInstanceState)
para restaurar la imagen.EDITAR:
Más información sobre el proceso real se detalla aquí http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle ya que es diferente en Honeycomb que las versiones anteriores de Android.
fuente
Solo usa :
android:configChanges="keyboardHidden|orientation"
fuente
Como mencionó Pacerier,
android:configChanges="orientation|screenSize"
fuente
No sé si es la mejor solución, pero lo describo aquí:
En primer lugar, necesita un certificado con su clase. La aplicación de su aplicación está en su manifiesto de esto:
En segundo lugar, en la aplicación de mi clase me gustó esto:
En tercer lugar, debe establecer un indicador en Cambio de orientación, en mi caso, siempre lo configuro cuando se llama a la actividad anterior dentro de la navegación de la aplicación, por lo que solo se llama una vez cuando se crea la actividad posterior.
Entonces, cada vez que cambio la orientación de mi pantalla en ese contexto, la configuro cada vez que cambia esta configuración, comprueba si hay un cambio en la orientación, de ser así, la valida en función del valor de esa bandera.
Básicamente, tenía que usarlo cada vez que realizaba una solicitud de modificación asincrónica, a la que llamaba cada momento que cambiaba de orientación, bloqueando constantemente la aplicación:
No sé si es la solución más elegante y hermosa, pero al menos aquí es funcional :)
fuente
Agregue este código después del
onCreate
método, en su actividad que contiene elWebView
fuente