Anteprima
Vedrai una selezione di 12 pagine su 54
Mobile Programming Pag. 1 Mobile Programming Pag. 2
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Mobile Programming Pag. 6
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Mobile Programming Pag. 11
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Mobile Programming Pag. 16
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Mobile Programming Pag. 21
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Mobile Programming Pag. 26
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Mobile Programming Pag. 31
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Mobile Programming Pag. 36
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Mobile Programming Pag. 41
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Mobile Programming Pag. 46
Anteprima di 12 pagg. su 54.
Scarica il documento per vederlo tutto.
Mobile Programming Pag. 51
1 su 54
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

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.
della View può essere specificata utilizzando i seguenti attributi: - `px` (Pixel) - Dimensioni fisiche dello schermo in pixel. - `in` (Inch) - Dimensioni fisiche dello schermo in pollici. - `mm` (Millimetri) - Dimensioni fisiche dello schermo in millimetri. - `pt` (Punti) - 1/72 di pollice. - `dp` (Density-independent Pixels) - Un'unità astratta basata sulla densità fisica dello schermo. Queste unità sono relative a uno schermo da 160 dpi, quindi un dp è un pixel su uno schermo da 160 dpi. Il rapporto dp-pixel cambierà con la densità dello schermo, ma non necessariamente in proporzione diretta. - `"dip"` e `"dp"` sono uguali. - `sp` (Pixel indipendenti dalla scala) - Simile all'unità dp, ma anche dimensionato in base alla preferenza della dimensione del carattere dell'utente. Posizione: La geometria di una View è quella di un rettangolo. Una View ha una posizione, espressa come coppia di coordinate sinistra e superiore (`left`, `top`), e due dimensioni, espresse, ciascuna, come larghezza e altezza (`height`, `width`). L'unità per posizione e dimensioni può essere specificata utilizzando gli attributi sopra elencati.

è 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
ConstraintLayout I LinearLayout si dividono in: - Orizzontali: le View vengono disposte una a fianco dell'altra - Verticali: le View vengono disposte una sotto all'altra Views Le View sono quindi disposte in uno specifico contenitore (layout). È possibile aggiungere View da codice o in uno o più file di layout XML. Esistono molte sottoclassi (estensioni) di View specializzate che fungono da controlli o sono in grado di visualizzare testo, immagini o altri contenuti. Le sottoclassi di View più usate sono: TextView, EditText, Button, RadioButton, Checkbox, Switch. Ne esistono tantissime altre, sia di sistema (SDK Android) che importabili da librerie di terze parti. Android Arsenal Repository di progetti open source: - Migliaia di progetti divisi per categorie - MPAndroidChart - ZXing - Icons - Glide - Picasso - ... TextView La View TextView implementa un oggetto in cui è possibile far apparire del testo da programma ma

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.
4: Jetpack Compose Jetpack Compose è un moderno toolkit per la creazione di interfacce utente Android native. Jetpack Compose semplifica e accelera lo sviluppo dell'interfaccia utente su Android con meno codice, strumenti potenti e API Kotlin intuitive. Jetpack Compose è costruito attorno a funzioni dette Composable. Queste funzioni consentono di definire l'interfaccia utente dell'app a livello

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 e Column.
  • Column posiziona gli oggetti verticalmente sullo schermo.
  • Row posiziona gli oggetti orizzontalmente sullo schermo.
  • Box permette la sovrapposizione di oggetti.
  • Box, Row e Column 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 che

Un'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.

Dettagli
Publisher
A.A. 2021-2022
54 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher copf.daraio di informazioni apprese con la frequenza delle lezioni di Mobile programming e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Roma Tor Vergata o del prof Regoli Massimo.