Questo codelab fa parte del corso Android Kotlin Fundamentals. Otterrai il massimo valore da questo corso se lavori in sequenza nei codelab. Tutti i codelab del corso sono elencati nella pagina di destinazione di Android Kotlin Fundamentals.
Introduzione
Uno dei principali punti di forza di RecyclerView
è che consente di utilizzare i gestori del layout per controllare e modificare la strategia di layout. Una LayoutManager
gestisce la disposizione degli elementi in RecyclerView
.
RecyclerView
è dotata di layout preconfigurati e pronti all'uso per i casi d'uso più comuni. Ad esempio, puoi utilizzare LinearLayout
per gli elenchi orizzontali e verticali o GridLayout
per le griglie. Per casi d'uso più complicati, è necessario implementare un LayoutManager
personalizzato.
In questo codelab, imparerai a visualizzare i dati utilizzando un layout a griglia anziché un elenco, a partire dall'app di monitoraggio del sonno del codelab precedente. Se non hai l'app del codelab precedente, puoi scaricare il codice di avvio per questo codelab.
Informazioni importanti
Dovresti acquisire familiarità con:
- Creare un'interfaccia utente di base con
Activity
,Fragments
eViews
- Spostamento tra frammenti e utilizzo di
safeArgs
per trasmettere dati tra frammenti - Visualizzare modelli, fabbriche di modelli e trasformazioni
LiveData
e i suoi osservatori- Come creare un database
Room
, creare un DAO e definire le entità - Come utilizzare le coroutine per le attività di database e altre attività di lunga durata
- Come implementare un
RecyclerView
di base con unAdapter
,ViewHolder
e un layout degli elementi - Come implementare l'associazione di dati per
RecyclerView
- Come creare e utilizzare adattatori di associazione per trasformare i dati
Obiettivi didattici
- Come utilizzare un
LayoutManager
diverso per modificare la modalità di visualizzazione dei tuoi dati nelRecyclerView
- Come creare un layout a griglia per i dati relativi al sonno
In questo lab proverai a:
- Crea nel tracker l'app di monitoraggio del sonno del codelab precedente di questa serie.
- Sostituisci l'elenco di dati sul sonno visualizzati da
RecyclerView
nell'app con una griglia di dati sul sonno.
L'app di monitoraggio del sonno è composta da due schermate, rappresentate da frammenti, come mostrato nella figura che segue.
La prima schermata, mostrata a sinistra, contiene pulsanti per avviare e interrompere il monitoraggio. Sullo schermo sono visualizzati alcuni dati del sonno dell'utente. Il pulsante Cancella elimina definitivamente tutti i dati raccolti dall'app per l'utente. La seconda schermata, mostrata a destra, consente di selezionare una valutazione della qualità del sonno.
Questa app utilizza un'architettura semplificata con un controller UI, un modello vista e LiveData
, oltre a un database Room
per conservare i dati relativi al sonno.
I dati relativi al sonno vengono mostrati in un elemento RecyclerView
. In questo codelab, modificherai l'app in modo che utilizzi un GridLayout
. La schermata finale sarà simile allo screenshot di seguito.
In un codelab precedente, quando hai aggiunto RecyclerView
a fragment_sleep_tracker.xml
, hai aggiunto LinearLayoutManager
senza personalizzazioni. Questo codice mostra i dati sotto forma di elenco verticale.
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
LinearLayoutManager
è il gestore di layout più comune e semplice per RecyclerView
e supporta il posizionamento orizzontale e verticale delle visualizzazioni secondarie. Ad esempio, puoi utilizzare LinearLayoutManager
per creare un carosello di immagini che l'utente scorre in orizzontale.
Layout griglia
Un altro caso di utilizzo comune è la necessità di mostrare all'utente una grande quantità di dati, operazione che puoi effettuare utilizzando GridLayout
. GridLayoutManager
per RecyclerView
definisce i dati come griglia scorrevole, come mostrato di seguito.
Dal punto di vista della progettazione, GridLayout
è ideale per elenchi che possono essere rappresentati come icone o immagini, come elenchi all'interno di un'app di navigazione fotografica. Nell'app del monitoraggio del sonno, potresti mostrare ogni notte di sonno come una griglia di icone di grandi dimensioni. Questo design fornirebbe all'utente una panoramica della sua qualità del sonno a colpo d'occhio.
In che modo GridLayout struttura gli elementi
GridLayout
dispone gli elementi in una griglia di righe e colonne. Supponendo che lo scorrimento verticale, per impostazione predefinita, ogni elemento di una riga occupi un'unica riga." In questo caso, una sezione equivale alla larghezza di una colonna.
Nei primi due esempi mostrati di seguito, ogni riga è composta da tre sezioni. Per impostazione predefinita, GridLayoutManager
definisce ogni elemento in un intervallo fino al numero di intervalli specificato. Quando raggiunge il numero di intervalli, va a capo nella riga successiva.
Per impostazione predefinita, ogni elemento occupa un periodo, ma puoi ampliarlo specificando il numero di sezioni da occupare. Ad esempio, l'elemento più in alto nella schermata più a destra (mostrata di seguito) occupa tre sezioni.
In questa attività, prendi l'RecyclerView
che hai completato nell'ultimo esercizio e lo aggiorni per visualizzare i dati utilizzando un GridLayoutManager
. Puoi continuare a utilizzare l'app del monitoraggio del sonno dal codelab precedente oppure puoi scaricare l'app RecyclerViewGridLayout-Starter da GitHub.
Passaggio 1: cambia il LayoutManager
- Se necessario, scarica l'app RecyclerViewGridLayout-Starter per questo codelab da GitHub e apri il progetto in Android Studio.
- Apri il file di layout
fragment_sleep_tracker.xml
. - Rimuovi Gestione layout dalla definizione di
RecyclerView
sleep_list
.
Codice da eliminare:
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager
- Apri
SleepTrackerFragment.kt
. - In
OnCreateView()
, poco prima dell'istruzionereturn
, crea un nuovo verticale, dall'alto verso il basso, con 3 sezioni.
Il costruttoreGridLayoutManager
prende in considerazione fino a quattro argomenti: un contesto, ovveroactivity
, le cifre (colonne, nel layout verticale predefinito), un orientamento (per impostazione predefinita è verticale) e un layout inverso (il valore predefinito èfalse
).
val manager = GridLayoutManager(activity, 3)
- Sotto questa riga, chiedi a
RecyclerView
di utilizzare questoGridLayoutManager
.RecyclerView
si trova nell'oggetto binding e si chiamasleepList
. Vedifragment_sleep_tracker.xml
.
binding.sleepList.layoutManager = manager
Passaggio 2: modifica il layout
Il layout corrente in list_item_sleep_night.xml
mostra i dati utilizzando un'intera riga per notte. In questo passaggio devi definire un layout a elementi quadrati più compatto per la griglia.
- Apri
list_item_sleep_night.xml
. - Elimina
TextView
sleep_length
perché il nuovo design non è necessario. - Sposta
quality_string
TextView
in modo che venga visualizzato sotto ilImageView
. Per farlo, devi aggiornare diversi elementi. Ecco il layout finale dellaquality_string
TextView
:
<TextView
android:id="@+id/quality_string"
android:layout_width="0dp"
android:layout_height="20dp"
android:textAlignment="center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/quality_image"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/quality_image"
app:layout_constraintTop_toBottomOf="@+id/quality_image"
tools:text="Excellent!!!"
app:sleepQualityString="@{sleep}" />
- Verifica nella visualizzazione Design che la
TextView
diquality_string
sia posizionata sotto aImageView
.
Poiché hai utilizzato l'associazione di dati, non devi modificare nessuno in Adapter
. Il codice dovrebbe funzionare e l'elenco dovrebbe essere visualizzato come una griglia.
- Esegui l'app e osserva come vengono visualizzati i dati relativi al sonno in una griglia.
Tieni presente cheConstraintLayout
utilizza ancora l'intera larghezza.GridLayoutManager
imposta una larghezza fissa in base alla sua vista.GridLayoutManager
si impegna al massimo per rispettare tutti i vincoli quando si applica la griglia, quando si aggiungono spazi vuoti o vengono ritagliati gli elementi.
- In
SleepTrackerFragment
, nel codice che crea il valoreGridLayoutManager
, modifica il numero di sezioni perGridLayoutManger
impostandolo su 1. Esegui l'app e vedrai un elenco.
val manager = GridLayoutManager(activity, 1)
- Modifica il numero di intervalli per
GridLayoutManager
in 10 ed esegui l'app. Noterai cheGridLayoutManager
adatterà 10 elementi di seguito, ma gli elementi verranno ora ritagliati. - Modifica il numero di intervalli su 5 e la direzione su
GridLayoutManager.VERTICAL
. Esegui l'app e osserva come puoi scorrere in orizzontale. Devi avere un layout diverso per migliorare l'aspetto.
val manager = GridLayoutManager(activity, 5, GridLayoutManager.HORIZONTAL, false)
- Non dimenticare di impostare il conteggio dello span su 3 e l'orientamento su verticale.
Progetto Android Studio: RecyclerViewGridLayout
- I gestori del layout gestiscono la disposizione degli elementi in
RecyclerView
. RecyclerView
è dotato di layout preconfigurati per i casi d'uso più comuni, comeLinearLayout
per gli elenchi orizzontali e verticali eGridLayout
per le griglie.- Per casi d'uso più complicati, implementa un elemento
LayoutManager
personalizzato. - Dal punto di vista della progettazione,
GridLayout
è ideale per gli elenchi di elementi che possono essere rappresentati come icone o immagini. GridLayout
dispone gli elementi in una griglia di righe e colonne. Supponendo che lo scorrimento sia verticale, ciascun elemento di una riga occupa un elemento chiamato &spant;span."- Puoi personalizzare il numero di sezioni occupate da un elemento, creando griglie più interessanti senza dover utilizzare un gestore di layout personalizzato.
- Viene creato un layout di elemento per una griglia e il gestore di layout si occupa di organizzarli.
- Puoi impostare
LayoutManager
perRecyclerView
nel file di layout XML contenente l'elemento<RecyclerView>
oppure in modo programmatico.
Corsi Udacity:
Documentazione per gli sviluppatori Android:
In questa sezione sono elencati i possibili compiti per gli studenti che lavorano attraverso questo codelab nell'ambito di un corso tenuto da un insegnante. Spetta all'insegnante fare quanto segue:
- Assegna i compiti, se necessario.
- Comunica agli studenti come inviare compiti.
- Valuta i compiti.
Gli insegnanti possono utilizzare i suggerimenti solo quanto e come vogliono e dovrebbero assegnare i compiti che ritengono appropriati.
Se stai lavorando da solo a questo codelab, puoi utilizzare questi compiti per mettere alla prova le tue conoscenze.
Rispondi a queste domande
Domanda 1
Quali dei seguenti strumenti di layout sono forniti da Android? Seleziona tutte le risposte pertinenti.
▢ LinearLayouManager
▢ GridLayoutManager
▢ CircularLayoutManager
▢ StaggeredGridLayoutManager
Domanda 2
Che cos'è un &spant;span"?
▢ Le dimensioni di una griglia creata da GridLayoutManager
.
▢ La larghezza di una colonna della griglia.
▢ Le dimensioni di un elemento in una griglia.
▢ Il numero di colonne in una griglia con orientamento verticale.
Inizia la lezione successiva: