Android, jak nie zniszczyć aktywności, gdy obrócę urządzenie?

Mam aplikację, która działa tylko w trybie portretowym, i wprowadziłem zmiany w moim pliku manifestu dla każdej aktywności orientację na portret. Ale kiedy obrócę urządzenie, aktywność zostanie odtworzona ponownie. Jak nie zniszczyć działalności?

Author: Vasil, 2010-07-25

6 answers

Dla API 12 i poniżej : dodaj

android:configChanges="orientation"

Dodaj "screenSize", jeśli kierujesz API 13 lub powyżej, ponieważ za każdym razem, gdy zmienia się orientacja, zmienia się również rozmiar ekranu, w przeciwnym razie nowe urządzenia będą nadal niszczyć Twoją aktywność. W przeciwieństwie do Egg ' a, Egg nie jest w stanie go pokonać.]}

android:configChanges="orientation|screenSize"

Do Twojej aktywności w AndroidManifest.xml. W ten sposób Twoja aktywność nie zostanie automatycznie ponownie uruchomiona. Zobacz dokumentacja aby uzyskać więcej informacji

 117
Author: ChallengeAccepted,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-23 22:27:39

Z oficjalnego dokumentu flurin powiedział,

Uwaga: Jeśli Twoja aplikacja ma poziom API 13 lub wyższy (zgodnie z deklarowanym przez atrybuty minSdkVersion i targetSdkVersion), wtedy należy również zadeklarować konfigurację "screenSize" , ponieważ zmienia się również gdy urządzenie przełącza się między orientacją pionową i poziomą.

Więc jeśli Twoja aplikacja ma poziom API 13 lub wyższy, powinieneś ustawić ten config zamiast:

android:configChanges="orientation|screenSize"

 104
Author: egg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-04 10:53:16

Właściwym rozwiązaniem jest

Android: configChanges= "orientacja / ekran"

Dokumentacja Androida:

obecnie dostępny rozmiar ekranu uległ zmianie. Oznacza to zmianę aktualnie dostępnego rozmiaru w stosunku do bieżącego współczynnika proporcji, więc zmieni się, gdy użytkownik przełącza się między poziomym i pionowym. Jeśli jednak Twoja aplikacja ma API na poziomie 12 lub niższym, to Twoja aktywność zawsze obsługuje tę zmianę konfiguracji (Ta konfiguracja zmiana nie uruchamia ponownie aktywności, nawet gdy działa na urządzeniu z systemem Android 3.2 lub nowszym).

 8
Author: er_benji,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-05 09:21:05

Trochę to namieszałem, a potem przekonałem się, że wewnątrz pliku manifestu umieszczałem configChanges na poziomie aplikacji, a nie na poziomie aktywności. Oto, jak wygląda kod, gdy działa poprawnie dla mnie.

Obraz poprawnego kodu plików manifestu

 1
Author: superheron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-05 03:05:44

Spójrz na ten kod na pływającym obrazku. Ma najciekawszy sposób obsługi obrotu ekranu w historii. http://code.google.com/p/floatingimage/source/browse/#svn/trunk/floatingimage/src/dk/nindroid/rss/orientation

 0
Author: androidworkz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-26 12:20:54

Zapis w manifeście:

android:configChanges="orientation|screenSize|keyboardHidden"

I nadpisać to w aktywności, która rozwiązała twój problem:

 @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
}
 -1
Author: mojtaba,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-04 17:39:59