2010-07-14 21 views
6

¿Hay alguna manera de cambiar ImageView dibujable con su dibujo correspondiente para el modo horizontal sin destruir toda la actividad? Traté de establecer el dibujo de nuevo en la devolución de llamada configuradaChanged, pero no funciona. Algo como estocambiar la imagen onConfigurationChanged

@Override 
public void onConfigurationChanged(Configuration conf) { 
    super.onConfigurationChanged(conf); 
    mImageView.setImageDrawable(getResources().getDrawable(R.drawable.iv)); 
} 

Cuando selecciono la actividad en modo apaisado para que se muestre correctamente dibujable, los recursos se ubican correctamente.

Respuesta

6

En el proyecto de ejemplo basta con sustituir

iv.setBackgroundResource(R.drawable.android); 

con

iv.setImageDrawable(getResources().getDrawable(R.drawable.android)); 

supongo setBackgroundResource no hace nada porque el mismo recurso ya está asignado a ImageView.

Tome un vistazo a este
http://open-pim.com/tmp/ImageTest.zip
Probé su acercamiento y funciona muy bien para mí.

+0

Hola, gracias por la respuesta, pero todavía no funciona para mí. Supongo que olvidó declarar android: configChanges = "navegación | orientación" en su manifiesto y se recrea la actividad. Aquí está mi código (enlace a google docs) https://docs.google.com/uc?id=0B6e5v3bLSI3ZYTQyYTRhYTctMDE4MS00M2QzLTk1Y2EtYWU3NmZmZmJiN2Zl&export=download&hl=en. Cuando inicie la actividad es en modo apaisado o elimine configChange del manifiesto, todo está bien, por lo que los recursos se ubican y se cargan correctamente. –

+0

android: configChanges está ahí, se llama aConfigurationChanged. Por favor prueba mi muestra para asegurarte. Actualicé el enlace, fue incorrecto. – Fedor

+0

setBackgroundResource es otro problema posible – Fedor

0

¿Hay una manera de cambiar ImageView estirable con su correspondiente estirable para el modo paisaje sin destruir toda la actividad.

Cuando se cambia de vertical a horizontal o viceversa se recrea la actividad. Compruebe que se llama al método onCreate().

Si se quiere evitar este tipo de utilización comportamiento:

android:configChanges="orientation|keyboardHidden" 

para su Activity en el AndroidManifest.

-

En relación con su pregunta: Me primero comprobaría cómo se llama primero después de un cambio de orientación: onConfigurationChanged o onCreate.

Si onConfigurationChanged se llama en primer lugar, a continuación, su setContentView() en su método de onCreate() estén reemplazando ImageView estirable.

+0

Como publiqué, no quiero volver a crear la actividad después de que se haya cambiado la configuración. Sí, utilicé android: configChanges = "orientation | keyboardHidden" en el archivo manifest para que mi actividad se creara solo una vez y luego con cada cambio de configuración enCongigurationChanged se invoque sin volver a crear la actividad y mi objetivo es cambiar algunos ImageView subyacentes dibujables con el dibujante ubicado en res/drawable-land. –

+0

El OP desea manejar el cambio de orientación por su código (para evitar la recreación de la aplicación), y necesita acceso a los recursos para la orientación horizontal. – Pentium10

+0

@Mojo Risin: oh, está bien. Entonces se llama 'onConfigurationChanged' aunque usted haya configurado eso en su Manifiesto? – Macarse

0

Para el emulador, necesitará screenLayout además de la orientación para llamar al método.

android:configChanges="orientation|screenLayout" 
Cuestiones relacionadas