2010-03-20 19 views
20

Mi sono tormentato per ore su questo problema. Ho creato un main.xml e ne ho progettato uno per il formato res/layout-land (landscape) e un altro per portrait in res/layout.Orientamento dello schermo orizzontale al ritratto non funzionante

Quando ruoto l'emulatore (ctrl-F11), la mia app ruota correttamente in orizzontale usando il main.xml corretto, ma una successiva rotazione in verticale semplicemente mantiene il paesaggio mail.xml.

Questo è stato fatto in un AVD 2.0 ..

Fuori despiration ho scaricato il nuovo Codice di esempio per risoluzioni multiple e ha dovuto creare un nuovo 2.1 AVD, con mia grande sorpresa la rotazione con questa applicazione funziona correttamente come previsto. Così ho deciso di provare la mia app sul 2.1 AVD e funziona perfettamente.

Quindi, questo è un bug in un AVD 2.0 o c'è qualcosa di speciale che devo fare per < 2.1 versioni di SDK?

Questo mi sta facendo impazzire, perché nessuno dove qualcuno ha menzionato questo problema.

Grazie in anticipo

+0

Vedo lo stesso nell'emulatore 2.3.3 ora ... 1.6 e 2.1 funzionano bene però ... rendono difficile il test :) – Jay

risposta

3

se non si specifica

<activity android:name="MainActivity" android:configChanges="orientation"> 

Nella tua manifesta, credo che la vostra applicazione dovrebbe selezionare automaticamente il layout.xml corretta. Quindi, mi sembra un errore nell'emulatore. Ad ogni modo, ho scoperto che l'emulatore è bacato in altri modi. Ex. esegue il codice due volte quando si modifica l'orientamento indietro.

+0

Quando si modifica l'orientamento, l'attività viene ricreata e il suo metodo onCreate() è chiamato di nuovo che ricrea l'intera attività. Quindi non è un bug .. – YuDroid

0

Sì, l'emulatore è un po 'buggato quando si tratta di cambiamenti di orientamento. Non ho riscontrato questo problema specifico, ma a volte fa cose strane. Tuttavia questo sicuramente non è un problema con gli SDK 2.1 <, almeno su un telefono fisico, perché sono ancora bloccato con v1.5 sul mio eroe e gestisce correttamente le modifiche all'orientamento selezionando la cartella di layout corretta per ottenere i file xml a partire dal.

0

Ho fatto solo lo sviluppo 2.1, ma un altro pensiero che ho appena avuto sarebbe stato quello di provare CTRL-F12 (Passa all'orientamento del layout NEXT) invece di CTRL-F11 (Passa a PRECEDENTE orientamento del layout() e vedere se qualcosa cambia . Questo è da Controlling the Emulator.

Inoltre, ci sono una serie di metodi del ciclo di vita si può ignorare per monitorare ciò che accade dietro le quinte. Questo potrebbe farvi sapere se c'è un bug nell'emulatore.

1

sono utilizzando Eclipse per Java Helios e Android 2.2 e ho riscontrato lo stesso problema sul mio portatile.Ho scoperto quale fosse il problema per me, a volte lavoro sul mio portatile in un'area che non ha wifi quindi non sono connesso a internet e questo sembra causare questo problema. L'ho provato andando a un hotspot wifi e, abbastanza sicuro, il passaggio tra ritratto e paesaggio e viceversa funziona bene. Forse l'emulatore deve semplicemente avere una connessione per farlo o è un bug nell'emulatore.

9

FWIW, è segnalato ufficialmente come bug here.

+3

La soluzione alternativa è quella di premere il pulsante home quando si è in modalità verticale, che resetterà il sensore di gravità – StuTheDog

0

Anche io ho dovuto affrontare lo stesso problema. L'ho risolto. Non penso che questo sia un bug dell'emulatore. Penso che anche in alcuni telefoni reali si comporterà in questo modo. Il motivo principale è che l'attività non è rinfrescante. Puoi fare una cosa: ignorare il

public void onConfigurationChanged(Configuration newConfig) { 
    // TODO Auto-generated method stub 
    super.onConfigurationChanged(newConfig); 
    startActivity(getIntent()); 
    finish(); 

} 

e ricaricare l'attività corrente. Ti aiuterà.

4

Installato un nuovo ambiente di sviluppo Android e creato un nuovo AVD 2.3.3. (Sia il braccio che x86). Entrambi hanno lo stesso problema, anche con le app di sistema. Quindi non è un bug nel tuo codice, perché le app di sistema hanno lo stesso problema.

Premendo "home" e riavviando l'app, è possibile riprendere il ritratto.

Problemi correlati