2012-12-24 18 views
5

Sto lavorando alle applicazioni Android live wallpaper e devo gestire correttamente le modifiche all'orientamento dello schermo.Problema di gestione dell'orientamento dello schermo Android

Attualmente utilizzo onConfigurationChanged per questo scopo (in questo metodo è necessario modificare le coordinate dei miei elementi dello schermo LWP. Io uso andengine). Tutto funziona correttamente sugli emulatori e sui miei telefoni di prova, ma alcuni miei clienti con Samsung Galaxy Note2 (t03g), LG brivido (LGE LG-P925) segnala i problemi con il lavoro dell'applicazione non corretto durante il cambio di orientamento dello schermo.

Non ho questi telefoni a portata di mano, ma si può supporre che il problema sia relativo a onConfigurationChanged non chiamato.

E 'corretto utilizzare il metodo onConfigurationChanged? Forse ho bisogno di usare onSurfaceChanges o qualcosa del genere? Potrebbe per favore suggerirmi il modo corretto di risolvere questo problema?

Alos, ho aggiunto android:configChanges="keyboardHidden|orientation" nelle mie AndroidManifest.xml:

<activity 
      android:name=".WallpaperSettings" 
      android:configChanges="keyboardHidden|orientation" 
      android:exported="true" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.PREFERENCE" /> 
      </intent-filter> 
     </activity> 
+0

http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange –

risposta

3

Nella mia carta da parati dal vivo, che gestisce le modifiche di orientamento, io uso il metodo onConfigurationChange() per verificare le modifiche di orientamento, ma non hanno alcuna esperienza diretta con i 2 telefoni, se non ho mai ottenuto alcuna lamentela circa loro. Il mio metodo sembra qualcosa sulla falsariga di:

@Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 

     // Checks the orientation of the screen 
     if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     rotated = true; 
     } 
     else { 
     rotated = false; 
     } 
    } 

E nel metodo draw(), ho controllare il rotated booleano. Sono disponibili ulteriori verifiche nello onSurfaceChanged() per correggere le modifiche alla risoluzione quando l'orientamento cambia.

Non ho il android:configChanges="keyboardHidden|orientation" nel mio file manifest.

2
android:configChanges="orientation|screenSize" 

Attenzione: A partire da Android 3.2 (API di livello 13), la "dimensione dello schermo" cambia anche quando gli interruttori dei dispositivi tra orientamento verticale e orizzontale . Pertanto, se si desidera impedire il riavvio del runtime a causa della modifica dell'orientamento durante lo sviluppo per il livello API 13 o successivo (come dichiarato dagli attributi minSdkVersion e targetSdkVersion), è necessario includere il valore "screenSize" oltre all'orientamento, . valore. Cioè, è necessario decalare android: configChanges = "orientation | screenSize". Tuttavia, se l'applicazione ha come target il livello API 12 o inferiore, l'attività sempre gestisce questa modifica della configurazione stessa (questa modifica di configurazione non riavvia l'attività, anche quando è in esecuzione su un dispositivo Android 3.2 o superiore).

Problemi correlati