2010-07-14 18 views
6

C'è un modo per modificare ImageView disegnabile con il corrispondente drawable per la modalità orizzontale senza distruggere l'intera attività. Ho provato a reimpostare il drawable nel callback onConfigurationChanged ma non funziona. Qualcosa di similecambia immagine onConfigurationChanged

Quando inizio l'attività in modalità orizzontale per correggere drawable viene visualizzato in modo che le risorse siano posizionate correttamente.

risposta

6

Nel progetto di esempio basta sostituire

iv.setBackgroundResource(R.drawable.android); 

con

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

Credo setBackgroundResource non fa nulla, perché la stessa risorsa è già assegnato a ImageView.

Date un'occhiata a questo
http://open-pim.com/tmp/ImageTest.zip
Ho cercato il tuo approccio e funziona solo grande per me.

+0

Ciao grazie per la risposta, ma non funziona ancora per me. Suppongo che tu abbia dimenticato di dichiarare android: configChanges = "navigation | orientation" nel tuo manifest e l'attività viene ricreata. Ecco il mio codice (link a google docs) https://docs.google.com/uc?id=0B6e5v3bLSI3ZYTQyYTRhYTctMDE4MS00M2QzLTk1Y2EtYWU3NmZmZmJiN2Zl&export=download&hl=en. Quando si avvia l'attività è orizzontale o rimuovi configChange da manifest tutto è ok, quindi le risorse sono localizzate e caricate correttamente. –

+0

android: configChanges è lì, viene chiamato onConfigurationChanged. Si prega di provare il mio campione per garantire. Ho aggiornato il link, non era corretto. – Fedor

+0

setBackgroundResource è un altro possibile problema – Fedor

0

C'è un modo per cambiare ImageView drawable con il suo corrispondente drawable per la modalità paesaggio senza distruggere l'intera attività.

Quando si passa da verticale a orizzontale o viceversa, l'attività viene ricreata. Verificare che venga chiamato il metodo onCreate().

Se si vuole evitare questo tipo di utilizzo comportamento:

android:configChanges="orientation|keyboardHidden" 

per il vostro Activity nel AndroidManifest.

-

In relazione alla tua domanda: ho controllerei come si chiama per primo dopo un cambio di orientamento: onConfigurationChanged o onCreate.

Se onConfigurationChanged è chiamato per primo, poi il tuo setContentView() nel metodo onCreate() sostituisce le ImageView drawable.

+0

Come ho postato non voglio ricreare l'attività dopo la configurazione modificata. Sì, ho usato android: configChanges = "orientation | keyboardHidden" nel file manifest, quindi la mia attività viene creata solo una volta e quindi con ogni modifica alla configurazione onCongigurationChanged viene chiamato senza ricreare l'attività e il mio obiettivo è modificare alcuni sottotitoli ImageView sottostanti con il drawable inserito res/drawable-Land. –

+0

L'OP vuole gestire la modifica dell'orientamento tramite il suo codice (per evitare la ricreazione dell'app) e ha bisogno di accedere alle risorse per l'orientamento orizzontale. – Pentium10

+0

@Mojo Risin: oh, ok. Quindi viene chiamato 'onConfigurationChanged' anche se l'hai impostato nel tuo manifest? – Macarse

0

Per l'emulatore, è necessario screenLayout oltre all'orientamento per chiamare il metodo.

android:configChanges="orientation|screenLayout" 
Problemi correlati