2012-12-24 15 views
5

Ich arbeite an der Android-Live-Wallpaper-Anwendungen und muss Bildschirmausrichtung Änderungen richtig zu behandeln.Android-Bildschirmausrichtung Handhabung Problem

Zur Zeit verwende ich onConfigurationChanged für diesen Zweck (in dieser Methode muss ich Koordinaten meiner LWP-Bildschirmelemente ändern. Ich benutze andengine). Alles funktioniert gut auf die Emulatoren und meine Test-Handys, aber einige meiner Kunden mit Samsung Galaxy Note2 (t03g), LG Nervenkitzel (LGE LG-P925) meldet die Probleme mit der fehlerhaften Anwendung Arbeit während der Bildschirmrichtungen ändern.

Ich habe diese Telefone nicht zur Hand, aber kann annehmen, dass das Problem mit onConfigurationChanged nicht in Verbindung gebracht wird.

Ist es korrekt, onConfigurationChanged Methode zu verwenden? Vielleicht muss ich onSurfaceChanges oder etwas ähnliches verwenden? Können Sie mir bitte den richtigen Weg vorschlagen, dieses Problem zu lösen?

Alos, habe ich android:configChanges="keyboardHidden|orientation" in meine AndroidManifest.xml hinzugefügt:

<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 –

Antwort

3

In meinem Live-Wallpaper, die Orientierungsänderungen behandelt, verwende ich die onConfigurationChange() Methode zur Orientierung Änderungen überprüfen, aber ich habe keine direkten Erfahrungen mit den 2 Telefonen, obwohl ich nie irgendwelche Beschwerden über bekommen habe Sie. Meine Methode sieht etwas entlang der Linien von:

@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; 
     } 
    } 

Und in der draw() Methode, überprüfe ich die rotated boolean. Es gibt zusätzliche Überprüfungen in der onSurfaceChanged(), um Änderungen der Auflösung zu korrigieren, wenn sich die Ausrichtung ändert.

Ich habe android:configChanges="keyboardHidden|orientation" in meiner Manifest-Datei überhaupt nicht.

2
android:configChanges="orientation|screenSize" 

Vorsicht: Beginnend mit Android 3.2 (API-Ebene 13), der "Bildschirmgröße" ändert sich auch dann, wenn sich das Gerät einschaltet zwischen Porträt und Landschaft Orientierung. Wenn Sie also Laufzeitneustarts aufgrund von Orientierungsänderungen bei der Entwicklung für API-Stufe 13 oder höher (wie durch die Attribute minSdkVersion und targetSdkVersion deklariert) verhindern möchten, müssen Sie zusätzlich zur "Ausrichtung" den Wert "screenSize" einfügen. Wert. Das heißt, Sie müssen android dekonfigurieren: configChanges = "orientation | screenSize". Wenn Ihre -Anwendung jedoch API-Ebene 12 oder niedriger anwendet, verarbeitet Ihre Aktivität immer diese Konfigurationsänderung selbst (diese Konfigurationsänderung startet Ihre Aktivität nicht neu, auch wenn sie auf einem Android 3.2 oder höheren Gerät ausgeführt wird).