Dziś rano wpadłem na problem, próbując poradzić sobie z tym onConfigurationChanged
wydarzeniem. Problem w tym, że metoda, którą nadpisuję, nie jest wywoływana przy zmianie orientacji telefonu. W ogóle mnie nie wezwano.
Ustawiłem android:configChanges="orientation"
aktywność zdefiniowaną w manifeście, jak wspomniano w dokumentacji Androida, ale to nie robi różnicy.
Czy wpadłeś na ten problem?
android:configChanges
Tak powiedział Google javadoc:Note: If your application targets API level 13 or higher (as declared by the minSdkVersion and targetSdkVersion attributes), then you should also declare the "screenSize" configuration, because it also changes when a device switches between portrait and landscape orientations.
Odpowiedzi:
To był mój gremlin z powodu tego samego problemu:
(Od http://developer.android.com/guide/topics/resources/runtime-changes.html )
TL; DR: dodaj „| screenSize” do configChanges w przypadku kierowania na poziom interfejsu API 13+
źródło
+1
z mojej strony"screenSize"
to było.Niektóre urządzenia w wersji 4.0 nie wywołują onConfigurationChanged. Po prostu dodaj słuchacza do screenSize.
źródło
onConfigurationChanged
, testowanie przeciwConfiguration.ORIENTATION_LANDSCAPE
i umieszczanie TYLKOandroid:configChanges="orientation"
w manifeście nie wystarczyło w przypadku mojego tabletu Nexus 7. DziękiProblem polegał na tym, że jeśli używasz tej metody
aby wymusić orientację
Activity
na tryb portretowy, nie jesteś kandydatem do otrzymywaniaorientation
zmian.Więc rozwiązaniem jest nie
setRequestOrientation
do określonego trybu. Ale zamiast tego użyjSCREEN_ORIENTATION_SENSOR.
źródło
onConfigChanged
, gdy użytkownik obraca telefon. Takie samo zachowanie jak w aplikacji YouTube. To możliwe?sprawdź, czy Twoje urządzenie ma włączone ustawienie „Obracanie ekranu”
źródło
android:screenOrientation
w sposóbActivity
lub wApplication
poziomie.android:configChanges="orientation|keyboardHidden"
zamiast tego.źródło
Spędziłem dziesiątki minut, aby dowiedzieć się, dlaczego to nie działa. Dodałem,
screenSize
ale nadal nie działało.Okazało się, że dodałem
android:configChanges
do<application>
elementu, a nie do<activity>
elementu tak, jak powinienem!Cóż, oczywiście to był mój błąd, ale wszyscy wiemy, że każdy z nas spędza dużo czasu na tego rodzaju głupich błędach. Tak więc dodaję tę odpowiedź na wypadek, gdyby pojawił się inny głupi programista taki jak ja.
źródło
Macarse ma 100% pieniędzy z drugą opcją.
Próbować
android:configChanges="orientation|keyboardHidden|screenSize"
Miałem dokładnie ten sam problem i na emulatorze 1.6 dodawanie
keyboardHidden
przyczynonConfigurationChanged
do wywołania podczas rotacji. Usuń go, a przestanie być wywoływany.źródło
Miałem ten sam problem -
onConfigurationChanged
nie został wywołany, gdy urządzenie zmieniło orientację pomimo posiadaniaandroid:configChanges="orientation|keyboardHidden"
w pliku manifestu. Użyłem fragmentu kodu udostępnionegoDeva
tutajorientacja nie działa w 2.3.3?
aby sprawdzić, czy ktoś
onConfigurationChanged
dzwoni. Nie było.Po kilku godzinach eksperymentowania zdałem sobie sprawę, że mam następujące wiersze w pliku manifestu
i po zmianie
android:targetSdkVersion="15"
naandroid:targetSdkVersion="8"
,onConfigurationChanged
zaczął być nazywany. Tak więc część manifestu w końcu wyglądała takźródło
attribute: screensize
”? Może być pomocne, jeśli podasz więcej szczegółów.Właśnie odkryłem, że jeśli masz:
w manifeście onConfigurationChanged () również nie zostanie wywołana ...
może to być podobne do:
to ustawienie orientacji blokuje onConfigurationChanged ().
źródło
Nie używaj żadnych docelowych wersji SDK, aby komplikować. i dla wszystkich poziomów interfejsu API użyj tego jako nasłuchiwania zmian konfiguracji
źródło
Nie jestem pewien, czy to najlepsze miejsce do tego, ale napotykając ten problem - zauważyłem coś ciekawego.
Jeśli detektor onConfigurationChanged () NIE działa, to onCreate () jest wywoływana ponownie przy każdej zmianie orientacji.
Jeśli detektor onConfigurationChanged () działa, to ta metoda jest wywoływana zamiast onCreate () w przypadku zmiany orientacji.
źródło
Nie wszystkie rozwiązania działają, ale próbuję usunąć aktywność związaną z motywem w pliku manifestu systemu Android. Bardzo dziwne
źródło
Żadna z sugestii nie zadziałała dla mnie (zareagowałem na projekt natywny z tym problemem), ale po godzinach debugowania stwierdziłem, że jeśli masz tę linię w AppTheme of styles.xml
aplikacja nie będzie się obracać.
źródło
@ thanhbinh84 Dał mi pomysł, co może być tego przyczyną.
Usunięcie
<item name="android:windowIsTranslucent">true</item>
z mojego motywu w styles.xml naprawiło to!źródło
Wystąpił ten sam problem i w manifeście określono zarówno „android: screenOrientation”, jak i „android: configChanges”. Kiedy usunąłem pierwszy, onConfigurationChanged () został wywołany podczas rotacji. Dziwne, ale wkurza)
źródło
Czy masz
android.content.res.Configuration
w swoich zestawieniach importowych? Eclipse może automatycznie wstawiać importy po naciśnięciuCtrl+Shift+O
.Jeśli tego nie ma, kompilator nie będzie w stanie rozpoznać, że zasadnie zastępujesz metodę nadklasy, a zatem zgłosi błąd.
źródło