Ho un'app che funziona solo in modalità verticale e ho apportato le modifiche nel mio file manifest per ogni attività che l'orientamento deve essere ritratto. Ma quando ruoto il dispositivo, l'attività si ricrea nuovamente. Come non distruggere l'attività?Android, come non distruggere l'attività quando ruoto il dispositivo?
risposta
Per API 12 e al di sotto: aggiungere
android:configChanges="orientation"
Add "Screensize", se si prendono di mira API 13 o superiore perché ogni volta che cambia l'orientamento così fa le dimensioni dello schermo, altrimenti nuovi dispositivi continueranno per distruggere la tua attività. Si veda la risposta di Uovo di seguito per ulteriori informazioni sull'uso di "Screensize"
android:configChanges="orientation|screenSize"
alla tua attività in AndroidManifest.xml. In questo modo la tua attività non verrà riavviata automaticamente. Vedi the documentation per ulteriori informazioni
L'attività viene riavviata di nuovo. Non so quale sia il senso di fare tutte le cose che devono essere fatte quando l'attività ruota, anche se non sta ruotando virtualmente. C'è un modo per disabilitare i messaggi che il sensore invia al sistema operativo in merito alla rotazione, o qualcosa del genere, per risolvere questo problema dalla sua radice? – Vasil
su quale dispositivo stai programmando? ricorda che, ad esempio, lo spostamento della tastiera potrebbe anche riavviare la tua attività ... (se questo è il motivo imposta confChanges su "keyboard | keyboardHidden | orientation") –
questa è la risposta giusta grazie mille –
Guarda questo codice in Immagine mobile. Ha il modo più interessante di gestire la rotazione dello schermo di sempre. http://code.google.com/p/floatingimage/source/browse/#svn/trunk/floatingimage/src/dk/nindroid/rss/orientation
Dal flurin documento ufficiale ha detto,
Nota: Se l'applicazione si rivolge a livello di API 13 o superiore (come dichiarato dal minSdkVersion e attributi targetSdkVersion), allora si dovrebbe dichiarare anche il "Screensize "configurazione, perché cambia anche quando un dispositivo passa da un orientamento verticale a uno orizzontale.
Quindi, se i vostri obiettivi app livello di API 13 o superiore, è necessario impostare questa configurazione invece:
android:configChanges="orientation|screenSize"
La soluzione giusta è
android: configChanges = "orientamento | Screensize"
Documentazione Android:
L'attuale dimensione dello schermo disponibile è cambiata. Ciò rappresenta un cambiamento nella dimensione attualmente disponibile, relativa al rapporto di aspetto corrente, quindi cambierà quando l'utente passa da orizzontale a verticale. Tuttavia, se la tua applicazione punta al livello API 12 o inferiore, l'attività manterrà sempre questa modifica della configurazione stessa (questa modifica alla configurazione non riavvia l'attività, anche quando è in esecuzione su un dispositivo Android 3.2 o successivo).
scrittura in palese:
android:configChanges="orientation|screenSize|keyboardHidden"
e sostituire questa attività che ha risolto il problema:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
Perché sovrascrivere il metodo onConfigurationChanged e chiamare l'implementazione originale facendo qualcosa di utile? – ricosrealm
avrei dovuto vedermela questo per un po 'e poi relized che dentro il file manifesto Stavo mettendo ConfigChanges a livello di applicazione e non a livello di attività. Ecco come appare il codice quando funziona correttamente per me.
Dovresti condividere il codice all'interno del tuo post anziché un'immagine. –
Per favore ** [modifica] ** il tuo post e mostra il codice manifest attuale come testo anziché schermate. Gli altri non possono copiare e incollare dalle tue immagini. [Vedi qui] (https://meta.stackoverflow.com/a/285557/1402846) per i dettagli. Grazie. – Pang
Questo è spesso consigliato contro, si potrebbe provare a impostare l'orientamento delle applicazioni a livello di programmazione con qualcosa di simile: setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); – stealthcopter
Perché sarebbe contro? Diciamo che abbiamo un servizio che richiede 2 secondi per essere eseguito. Se l'attività si distrugge ogni volta, quel servizio continua a funzionare ogni volta mentre ne ho solo bisogno per essere eseguito una volta. –