¿Cómo mantener abierta la ventana emergente cuando la orientación cambia en tiempo de ejecución en Android?

He creado una ventana emergente que contiene la vista de mes para recoger la fecha. Cuando cambio la orientación, debido a que Android carga una actividad de nuevo, mi ventana emergente desaparece. ¿Cómo puedo abrirlo incluso cuando la orientación cambia en tiempo de ejecución?

Incluya android:configChanges="orientation" en su AndroidManifest.xml a la ventana que muestra la actividad. Hacer esto le dice a android que va a manejar el cambio de orientación usted mismo y eventualmente no destruirá su actividad y mantendrá la ventana mostrada.

Esta técnica es buena si no tienes diseños diferentes para el modo retrato y paisaje. Sin embargo, si lo hace, puede realizar una implementación de diseño personalizado detectando el modo de orientación como se indica a continuación:

 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) Log.i("orientation", "Orientation changed to: Landscape"); else Log.i("orientation", "Orientation changed to: Portrait"); } 

Para obtener una vista previa, descargar e instalar esta aplicación de ejemplo .

Siempre que hay un cambio de orientación, Android destruye su actividad (las llamadas onDestroy() ) y luego se reinicia (llamadas onCreate() ).
Tan pronto como su ventana emergente esté lista, establezca un indicador popup_open=1 . Su popup naturalmente tendrá un botón de descartar. Establezca el indicador = 0 en el controlador de clics de este botón. A continuación, puede volver a abrir la ventana emergente cuando la aplicación se reinicie en el método onRestoreInstanceState() o en onCreate() . Aquí usted haría un cheque para la bandera. Si el indicador está establecido en 1, abra el menú emergente. Por lo tanto, incluso si la orientación cambia mientras el popup se ha incrementado, onRestoreInstanceState() sabrá qué hacer en función del estado del indicador. Para más verificación de referencia: Cómo manejar los cambios de tiempo de ejecución .

Añada esta propiedad a su actividad en manifest.xml

 android:configChanges="orientation|keyboard" 

Y que debería hacerlo.

Mostrando PopupWindow como

 final View parent = findViewById(R.id.{parentId}); parent.post(new Runnable() { @Override public void run() { mPopup.showAtLocation(parent, ...); } }); 

Resuelve la excepción no controlada en el cambio de orientación

  • ¿Cómo detectar los cambios de orientación pero dejar que el android los maneje?
  • Cómo rotar vistas sobre el cambio de orientación sin volver a crear el diseño?
  • Permitir rotación / paisaje en un fragmento
  • Cambio de la orientación del fragmento androide
  • ¿Cómo puedo romper las cosas con Fragmentos con setRetainInstance (true) y agregarlos a backstack?
  • Cambio de orientación de Android VideoView con vídeo almacenado en búfer
  • ¿Cuál es la diferencia conceptual entre sensor de vector de rotación y sensor de orientación en Android?
  • Cómo administrar el estado de la interfaz de usuario y la pila posterior en un diseño de panel único / dual
  • Restaurar el estado de TextView después de la rotación de la pantalla?
  • ¿Cómo puedo establecer un ancho máximo en un LinearLayout para que no se estire en modo horizontal?
  • Cómo alinear un elemento a la derecha en LinearLayout horizontal?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.