Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
IDA qualsiasi oggetto estendente View
Può essere associato un ID (un intero) per identificarlo in modo univoco all'interno dell'albero di layout. Quando l'app viene compilata, questo ID viene creato come numero intero, ma l'ID viene in genere assegnata nel file XML del layout come una stringa (@id/my_button). Questo è un attributo XML comune a tutti gli oggetti View (definito dalla classe View) e lo si usa molto spesso.
Le dimensioni rappresentano lo spazio occupato da una View in un Layout. Si potrebbero specificare larghezza e altezza con misure esatte, anche se meglio non farlo spesso. Si preferisce usare una di queste costanti per impostare la larghezza o l'altezza:
- wrap_content: dice alla View di ridimensionarsi alle dimensioni richieste dal suo contenuto.
- match_parent: dice alla View di diventare grande quanto consentirà il suo contenitore.
- px (pixel): pixel o punti effettivi sullo schermo.
- in (pollici): dimensioni fisiche.
è il pixel. Le coordinate sono rispetto al contenitore!
È possibile recuperare la posizione di una View richiamando i metodi getLeft()
e getTop()
:
- Il primo restituisce la coordinata sinistra, o X, del rettangolo che rappresenta la View.
- L'altro restituisce la coordinata superiore, o Y, del rettangolo che rappresenta la View.
Questi metodi restituiscono entrambi la posizione della vista rispetto al suo contenitore. Ad esempio, quando getLeft()
restituisce 20, significa che la View si trova 20 pixel a destra del bordo sinistro del suo contenitore.
La dimensione di una View è espressa in termini di larghezza e altezza. Una View possiede in effetti due possibili coppie di valori di larghezza e altezza. La prima coppia è nota come larghezza e altezza misurata (quella che la view vorrebbe). Queste dimensioni definiscono la dimensione che una View vuole avere all'interno del suo contenitore. Le dimensioni misurate possono essere ottenute chiamando
getMeasuredWidth()
e getMeasuredHeight()
La seconda coppia è semplicemente conosciuta come larghezza e altezza o, talvolta, larghezza e altezza del canvas. Queste dimensioni definiscono la dimensione effettiva della vista sullo schermo, al momento del disegno e dopo il processo di layout. Questi valori possono, ma non necessariamente, essere diversi dalla larghezza e dall'altezza misurate. La larghezza e l'altezza possono essere ottenute chiamando getWidth()
e getHeight()
Padding
Per misurare le proprie dimensioni esatte, una View tiene conto del padding (che è la distanza tra una view e il suo contenitore). Il padding è espresso in pixel per la parte sinistra, superiore, destra e inferiore della View. Il padding può essere utilizzato per aggiustare il contenuto della vista di un numero specifico di pixel all'interno del contenitore.
Layouts
- LinearLayout (verticale o orizzontale)
- RelativeLayout
che non è modificabile dall'utente (label). Si può usare per fornire informazioni all'utente o come label di altre View
EditText
Una EditText è una View per l'immissione e la modifica di testo. Quando si definisce una View di tipo EditText, è spesso utile specificare l'attributo inputType.
Importante: tenere presente che l'inputType non verifica la correttezza del testo inserito. Si limita solo a fornire una tastiera adeguata o a nascondere i caratteri digitati (aka: password).
Button
Un Button è costituito da un testo o un'icona (o entrambi) ed implementa una azione quando l'utente lo tocca (evento click). In realtà quasi ogni View reagisce all'evento onClick.
Quando l'utente fa clic su un oggetto Button questo riceve un evento onClick. Per intercettare da codice l'evento dobbiamo creare una classe che implementi View.OnClickListener che sovrascriva il metodo onClick.
Questo può essere fatto in 3 modi:
Inline: ovvero creando una f-lambda on the fly 2. Creando una classe apposita 3. Implementando l'evento sulla classe attuale Toast Un Toast è una speciale View che contiene un breve messaggio per l'utente. Quando la View viene mostrata all'utente, appare come una vista sull'applicazione.- Non riceve il focus.
- L'utente sarà probabilmente occupato a fare qualcos'altro.
- L'idea è quella di essere il più discreto possibile, pur mostrando all'utente le informazioni che si desidera vengano visualizzate.
Per creare una funzione composable, si aggiunge l'annotazione @Composable
al nome della funzione.
Nel wizard di Android Studio c'è un'opzione che permette di aggiungere subito Compose al gradle.
Box
, Column
& Row
- Una prima forma di layout per il posizionamento degli oggetti di UI è fornita dai contesti
Row
,Box
eColumn
. Column
posiziona gli oggetti verticalmente sullo schermo.Row
posiziona gli oggetti orizzontalmente sullo schermo.Box
permette la sovrapposizione di oggetti.Box
,Row
eColumn
sono nidificabili e possono contenere la descrizione della UI. Un layout va quindi pensato come un albero che nidifica layout o oggetti di UI. Compose effettua una stima dei pixel necessari.
Attributi
Un oggetto di UI o di Layout ammette una serie di attributi:
- Attributi generali:
Disponibili per tutti gli oggetti:
- Attributi specifici: dipendenti dalla natura dell'oggetto
La classe Modifier è una raccolta ordinata e immutabile di elementi modificatori che decorano o aggiungono comportamento agli elementi di Compose. Ad esempio, i listener di eventi, gli attributi di sfondo decorano o aggiungono un comportamento a Text o a Button. Ammessa in tutti gli oggetti UI e Layout.
Gli oggetti Text permettono di visualizzare testo ed informazioni testuali (labels), simili a Textview in XML.
Gli oggetti Button permettono l'interazione tra UI ed utente tramite il meccanismo del click (evento onClick).
Un TextField permette l'interazione UI utente tramite la virtual keyboard (come la EditText in XML).
var text by rememberSaveable { mutableStateOf("") }
Per la TextField rememberSaveable permette di veicolare informazioni tra 2 oggetti composable, salvando il valore della variabile alla ricostruzione dello stato.
dell'interfaccia.<rememberSaveable>
Lo stato in un'app è un qualsiasi valore che può cambiare nel tempo. Questa è una definizione molto ampia e comprende tutto, da un database Room a una variabile su una classe.Alcuni esempi di stato nelle app Android:
- Uno Snackbar che mostra quando non è possibile stabilire una connessione di rete.
- EditText che un utente può modificare.
- Slider che varia
mutableStateOf
crea un oggetto observable (che viene messo sotto osservazione da Compose e dal sistema operativo). È un tipo osservabile integrato con la fase runtime di compose. Ad esso viene associato un processo di verifica dello Stato.Ancora non abbiamo risolto il problema della ricostruzione della interfaccia: come nel caso XML lo stato delle variabili non viene mantenuto dopo una ricostruzione. Soluzione:
rememberSaveable
.Usare
RememberSaveable
per ripristinare lo stato dell'interfaccia utente dopo cheUn'attività o un processo è stato ricreato. RememberSaveable
mantiene lo stato tra le ricomposizioni. Inoltre, RememberSaveable
mantiene anche lo stato attraverso le attività e la ricreazione dei processi (rotazione).
5: State Recomposition
La recomposition si verifica ogni volta che un valore di stato cambia all'interno di una gerarchia di funzioni componibili. Non appena Compose
rileva un cambiamento di stato, esegue tutte le funzioni componibili nell'attività e ricompone tutte le funzioni interessate dal cambiamento del valore di stato. Ricomporre significa semplicemente che la funzione viene chiamata di nuovo e passa il nuovo valore di stato.