2012-12-24 24 views
5

Pracuję nad aplikacjami Android na żywo tapety i muszę poprawnie obsługiwać zmiany orientacji ekranu.Problem z obsługą orientacji ekranu Android:

Obecnie używam do tego celu onConfigurationChanged (w tej metodzie potrzebuję zmienić współrzędne moich elementów ekranu LWP.) Używam andengine). Wszystko działa dobrze na emulatorach i moich testowych telefonach, ale niektórzy moi klienci z Samsung Galaxy Note2 (t03g), LG dreszcz (LG LG-P925) zgłasza problemy z nieprawidłowym działaniem aplikacji podczas zmiany orientacji ekranu.

Nie mam tych telefonów pod ręką, ale można przypuszczać, że problem związany z numerem onConfigurationChanged nie jest wywoływany.

Czy to jest prawidłowe stosowanie metody onConfigurationChanged? Może muszę użyć onSurfaceChanges lub coś w tym stylu? Czy mógłbyś zaproponować mi prawidłowy sposób rozwiązania tego problemu?

Alos, dodałem android:configChanges="keyboardHidden|orientation" do moich 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 –

Odpowiedz

3

W moim tapety na żywo, który obsługuje zmiany orientacji, używam metody onConfigurationChange() aby sprawdzić zmiany orientacji, ale nie mam żadnego bezpośredniego doświadczenia z 2 telefony, chociaż nigdy nie dostał żadnych skarg im. Moja metoda wygląda mniej więcej wzdłuż linii:

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

A w metodzie draw(), sprawdzić rotated logiczną. W przypadku aktualizacji onSurfaceChanged() wprowadzono dodatkowe kontrole w celu skorygowania zmian rozdzielczości po zmianie orientacji.

W ogóle nie mam w moim pliku manifestu android:configChanges="keyboardHidden|orientation".

2
android:configChanges="orientation|screenSize" 

Uwaga: Począwszy od Androida 3.2 (API poziomu 13), "Rozmiar ekranu" zmienia się także wtedy, gdy przełączniki urządzeń między orientacją portretową i krajobrazową . Jeśli więc chcesz zapobiec ponownemu uruchomieniu w środowisku wykonawczym z powodu zmiany orientacji podczas programowania dla poziomu interfejsu API 13 lub wyższego (jako zadeklarowany przez atrybuty minSdkVersion i targetSdkVersion), wartość "screenSize" oprócz "orientacji" musi zawierać wartość "screenSize". wartość. Oznacza to, że musisz odcyfrować: android: configChanges = "orientation | screenSize". Jeśli jednak twoja aplikacja kieruje się na poziom API 12 lub niższy, wtedy twoja aktywność zawsze obsługuje tę zmianę samej konfiguracji (ta zmiana konfiguracji nie wznawia twojej aktywności, nawet jeśli działa na wyższym urządzeniu Android 3.2 lub ).