Passa ai contenuti principali

Android Studio - ConfigChanges

In questo articolo vedremo cos'è l'attributo ConfigChanges che si può impostare all'interno del file AndroidManifest.xml.

Maggiori informazioni si possono trovare a questo indirizzo (in inglese)

Alcune configurazioni del dispositivo possono cambiare durante l'uso dell'app (come l'orientamento dello schermo, la disponibilità della tastiera e quando l'utente attiva la modalità multi-finestra).
Quando si verifica una tale modifica, Android riavvia l'Activity in esecuzione (viene chiamato onDestroy(), seguito da onCreate()). Come si può vedere in questo articolo.
Il comportamento di riavvio è progettato per consentire all'applicazione di adattarsi alle nuove configurazioni ricaricando automaticamente l'applicazione con risorse alternative che corrispondono alla nuova configurazione del dispositivo.
Per gestire correttamente un riavvio, è importante che l'attività ripristini il suo stato precedente. È possibile utilizzare la funzione onSaveInstanceState(), ViewModel e salvataggio dati per salvare e ripristinare lo stato dell'interfaccia utente in seguito alle modifiche alla configurazione.
Per verificare che l'applicazione si riavvii con lo stato dell'applicazione intatto, è necessario richiamare le modifiche alla configurazione (come la modifica dell'orientamento dello schermo) durante l'esecuzione di varie attività nell'applicazione. L'applicazione dovrebbe essere in grado di riavviarsi in qualsiasi momento senza perdita di dati o stato dell'utente al fine di gestire eventi quali modifiche alla configurazione o quando l'utente riceve una telefonata in arrivo e quindi ritorna all'applicazione molto più tardi dopo che il processo dell'applicazione potrebbe essere stato distrutto.

Per maggiori informazioni su onSaveInstanceState() consultare questo articolo.

L'utilizzo dell'attributo ConfigChanges deve essere fatto all'interno del file AndroidManifest.xml contenuto all'interno della cartella manifest del progetto.
Per configurare questo attributo in modo che non venga ricaricata l'Activity quando si cambia orientamento dello schermo è sufficiente inserire questa riga di codice all'interno del tag activity Ecco il file AndroidManifest.xml l'attributo è stato inserito alla riga 13
In questo modo quando si orienta lo schermo da portrait (verticale) a landscape (orizzontale) o viceversa, l'Activity non verrà ricaricata e quindi non si perderanno i dati inseriti e/o calcoli effettuati.
Avvio dell'app
Pulsante Calcola premuto
Orientamento dello schermo cambiato da portrait a landscape o viceversa
Questa soluzione può essere utile nel caso in qui la nostra app abbia un solo layout per ogni tipo di dispositivo e/o orientamento schermo altrimenti bisogna utilizzare onSaveInstanceState() come descritto in questo articolo

Per altri tipi di ConfigChanges consultare questa guida (in Inglese).

Ora, quando una di queste configurazioni cambia, l'Activity non si riavvia. Al contrario, l'Activity esegue una chiamata alla funzione onConfigurationChanged().
A questa funzione viene passato un oggetto Configuration che specifica la nuova configurazione del dispositivo. Leggendo i campi nella Configurazione, è possibile determinare la nuova configurazione e apportare le modifiche appropriate aggiornando le risorse utilizzate nella propria interfaccia. Nel momento in cui viene chiamato questo metodo, l'oggetto Risorse dell'attività viene aggiornato per restituire risorse in base alla nuova configurazione, in modo da poter ripristinare facilmente elementi dell'interfaccia utente senza riavviare l'attività.

Ad esempio, la seguente implementazione di onConfigurationChanged() verifica l'orientamento attuale del dispositivo: Ecco come si presenta il file MainActivity.kt


Download Project
Download file APK


Commenti

Post popolari in questo blog

Arduino - Lampeggio Led (delay vs. millis)

Cosa sono delay() e millis()? Delay() è una funzione che mette in pausa il programma per un determinato tempo espresso in millisecondi, così facendo viene interrotta l'esecuzione del programma e se abbiamo un dispositivo in ingresso che durante il tempo di pausa cambia di stato il programma non se ne accorge fino a quando non ricomincia l'esecuzione dall'inizio. La struttura di delay è: delay(1000);   da inserire nel punto dello sketch in qui si vuole interrompere il programma in questo modo il programma viene messo in pausa per 1000 millisecondi = 1 secondo. Per saperne di più Millis() è una funzione che permette di sapere da quanto tempo è in funzione il microprocessore di Arduino UNO. In questo modo il programma non andrà mai in pausa ed è sempre in esecuzione, perché millis memorizza il tempo trascorso dall'avvio e poi per eseguire una determinata funzione si fa un controllo del tempo iniziale e il tempo trascorso. Per saperne di più Vediamo un esempi

Arduino - Utilizzo potenziometro e display LCD

Leggere il valore di un poteziometro (parte 1) Il potenziometro è un componente molto utilizzato in elettronica in quanto il suo uso permette di regolare una tensione variabile (in questo caso 0 - 5 Volt) in ingresso al microcontrollore. Il potenziometro va collegato secondo lo schema qui sotto al pin analogico A0 di Arduino.

Arduino - Lettura tensione potenziometro e display LCD

Leggere il valore di un poteziometro (parte 2) Oggi vedremo come leggere il valore in tensione di un potenziometro collegato al pin Analogico A0 di Arduino.