0 votos

Los modos vertical y horizontal utilizan imágenes de fondo diferentes, pero cuando cambia la orientación, el fondo se estira y no cambia como se esperaba.

Estoy intentando crear una aplicación con diferentes imágenes de fondo en modo vertical y horizontal en una actividad de pantalla completa, pero siempre utiliza la imagen de fondo del diseño vertical para ambos.

¿Alguien sabe por qué ocurre esto?

1voto

tonyrulez Puntos 26

Tras mucho buscar en Google y combinar resultados de distintos lugares, he encontrado una respuesta que me funciona.

En primer lugar, si el archivo AndroidManifest.xml contiene

android:configChanges="orientation"

Entonces significa que la configuración de tu actividad no se refrescará cuando cambie la orientación, y se te da la oportunidad de manejarlo manualmente vía onLayoutChange, lo que yo elegí hacer de la siguiente manera:

// Use a layout change listener to re-apply the background image if
// orientation changes.

   fScreenView.addOnLayoutChangeListener(new View.OnLayoutChangeListener()
   {
        @Override
        public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft,
                                   int oldTop, int oldRight, int oldBottom) {
            int orientation = getResources().getConfiguration().orientation;
            if(orientation == Configuration.ORIENTATION_LANDSCAPE) {
                fScreenView.setBackgroundResource (R.drawable.sab_logo_text_2);
            } else {
                fScreenView.setBackgroundResource (R.drawable.sab_logo_text_1);
            }
        }
    });

Si eso no te convence, siempre puedes dejar que Android lo haga por ti, matando y reiniciando tu actividad en el diseño correcto (en mi caso, la orientación correcta) simplemente eliminando

android:configChanges="orientation"

del archivo de manifiesto. En mi caso, el valor por defecto era

android:configChanges="orientation|keyboardHidden|screenSize"

y debe cambiarse por

android:configChanges="keyboardHidden|screenSize"

Tras lo cual, la actividad se cancelará y se reiniciará en la disposición correcta. En mi aplicación, el método en código resultó ser más rápido, así que lo manejé en código.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X