Po prostu nie potrzebuję nic do zmiany, gdy ekran jest obracany. Moja aplikacja wyświetla losowy obraz po pierwszym załadowaniu, a obrócenie urządzenia nie powinno wybierać innego losowego obrazu. Jak mogę (po prostu) powstrzymać to zachowanie?
152
Screen.lockOrientation(this)
z github.com/delight-im/Android-BaseLib/blob/master/Source/src/im/… w tym celu. Umożliwia odblokowanie, czego manifest nie umożliwia.Odpowiedzi:
Generalnie można to zrobić na trzy sposoby:
Jak sugerowały niektóre odpowiedzi, możesz rozróżnić przypadki, w których Twoja aktywność została utworzona po raz pierwszy i z której została przywrócona
savedInstanceState
. Odbywa się to poprzez nadpisanieonSaveInstanceState
i sprawdzenie parametruonCreate
.Możesz zablokować aktywność w jednej orientacji, dodając
android:screenOrientation="portrait"
(lub"landscape"
) do<activity>
w swoim manifeście.Możesz powiedzieć systemowi, że zamierzasz samodzielnie obsługiwać zmiany ekranu, określając
android:configChanges="orientation|screenSize"
w<activity>
tagu. W ten sposób aktywność nie zostanie odtworzona, ale zamiast tego otrzyma oddzwonienie (które możesz zignorować, ponieważ nie jest to dla Ciebie przydatne).Osobiście wybrałbym (3). Oczywiście, jeśli zablokowanie aplikacji w jednej z orientacji Ci odpowiada, możesz również wybrać (2).
źródło
android:configChanges="orientation|screenSize"
android:configChanges="orientation|screenSize"
pracuje dla mnie. Dzięki @Pacerierandroid:configChanges="orientation|screenSize"
wartość API> = 13, ponieważ wiele osób uważa Twoją odpowiedź za główną!Odpowiedź Xiona była bliska, ale nr 3 (
android:configChanes="orientation"
) nie zadziała, chyba że aplikacja ma poziom API 12 lub niższy.Na poziomie API 13 lub wyższym rozmiar ekranu zmienia się, gdy zmienia się orientacja, więc nadal powoduje to zniszczenie działania i rozpoczęcie po zmianie orientacji.
Po prostu dodaj atrybut „screenSize”, tak jak poniżej:
Teraz, gdy zmienisz orientację (i zmieni się rozmiar ekranu), działanie zachowuje swój stan i
onConfigurationChanged()
jest wywoływane. Spowoduje to zachowanie wszystkiego, co jest na ekranie (np. Strony internetowej w widoku sieci Web) po zmianie orientacji.Nauczyłem się tego z tej witryny: http://developer.android.com/guide/topics/manifest/activity-element.html
Jest to również najwyraźniej zła praktyka, więc przeczytaj poniższy link dotyczący obsługi zmian w czasie wykonywania:
http://developer.android.com/guide/topics/resources/runtime-changes.html
źródło
android:configChanges="orientation|screenSize"
Musisz tylko przejść do
AndroidManifest.xml
i wewnątrz lub w etykietach działań, musisz wpisać ten wiersz kodu, jak ktoś tam powiedział:Więc będziesz miał coś takiego:
Mam nadzieję, że to działa!
źródło
Po prostu dodaj
android:configChanges="orientation|screenSize"
w zakładce aktywności pliku manifestu.Tak więc aktywność nie zostanie ponownie uruchomiona po zmianie orientacji.
źródło
onSaveInstanceState()
ionCreate()
.Z mojego doświadczenia wynika, że właściwie lepiej jest po prostu radzić sobie ze zmianami orientacji we właściwy sposób, zamiast próbować podbijać inne zachowanie.
Należy zapisać obraz, który jest aktualnie wyświetlany w programie
onSaveInstanceState()
i przywrócić go poprawnie poonCreate()
ponownym uruchomieniu aplikacji .źródło
android:configChanges
należy unikać używania i używać go tylko w ostateczności. Przeczytaj artykuł Obsługa zmian w czasie wykonywania, aby uzyskać więcej informacji o tym, jak prawidłowo obsłużyć ponowne uruchomienie z powodu zmiany konfiguracji”.To rozwiązanie jest zdecydowanie najlepiej działające. W swoim pliku manifestu dodaj
W swojej klasie aktywności dodaj następujący kod
źródło
dodaj
android:configChanges="keyboardHidden|orientation|screenSize"
dla wszystkich tagów działań aplikacji w manifeście.źródło
Po prostu dodaj to do swojego
AndroidManifest.xml
Chodzi mi o to, że jest tag aktywności, dodaj to jako kolejny parametr. Jeśli potrzebujesz orientacji pionowej, zmień orientację poziomą na pionową. Mam nadzieję że to pomoże.
źródło
W pliku manifestu dodaj to do każdego działania. To pomoże
źródło
Wszystkie powyższe odpowiedzi nie działają dla mnie. Więc naprawiłem, wspominając o
label
zscreenOrientation
jak poniżej. Teraz wszystko w porządkuźródło
http://animeshrivastava.blogspot.in/2017/08/activity-lifecycle-oncreate-beating_3.html
źródło
Zapisz szczegóły obrazu w swoim
onPause()
lubonStop()
i użyj go w,onCreate(Bundle savedInstanceState)
aby przywrócić obraz.EDYTOWAĆ:
Więcej informacji na temat rzeczywistego procesu można znaleźć tutaj http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle, ponieważ w Honeycomb różni się on od poprzednich wersji Androida.
źródło
po prostu użyj :
android:configChanges="keyboardHidden|orientation"
źródło
Jak wspomniał Pacerier,
android:configChanges="orientation|screenSize"
źródło
Nie wiem, czy najlepsze rozwiązanie, ale opisuję to tutaj:
Przede wszystkim potrzebujesz certyfikatu z twoją klasą. Aplikacja twojej aplikacji jest w twoim manifeście:
Po drugie, w mojej aplikacji klasowej podobało mi się:
Po trzecie, musisz ustawić flagę na zmianę orientacji, w moim przypadku zawsze ustawiam ją, gdy wywoływana jest poprzednia aktywność w nawigacji aplikacji, więc dzwonię tylko raz, gdy tworzona jest późniejsza aktywność.
Więc za każdym razem, gdy zmieniam orientację mojego ekranu w tym kontekście, ustawiam go za każdym razem, gdy zmienia to ustawienie, sprawdza, czy nastąpiła zmiana orientacji, jeśli tak, sprawdza ją na podstawie wartości tej flagi.
Zasadniczo musiałem go używać za każdym razem, gdy wykonywałem asynchroniczne żądanie retrofitu, które nazywał każdą chwilą, która zmieniała orientację, ciągle zawieszając aplikację:
Nie wiem, czy to najbardziej eleganckie i najpiękniejsze rozwiązanie, ale przynajmniej tutaj funkcjonalne :)
źródło
Dodaj ten kod po
onCreate
metodzie, w swoim działaniu zawierającymWebView
źródło