Layout canonici

I layout canonici sono layout collaudati e versatili che offrono un'esperienza utente ottimale su una varietà di fattori di forma.

Rappresentazione di dispositivi con schermo grande che mostrano i layout canonici.

I layout canonici supportano gli smartphone con schermi piccoli, nonché tablet, dispositivi pieghevoli e dispositivi ChromeOS. Derivati dalle indicazioni di Material Design, i layout sono sia estetici che funzionali.

Il framework Android include componenti specializzati che rendono l'implementazione dei layout semplice e affidabile.

I layout canonici creano UI coinvolgenti e che migliorano la produttività, che costituiscono la base di app di alta qualità.

If you're already familiar with the adaptive app canonical layouts but aren't sure which Android APIs to use, jump to the Applicability section for help determining which layout is right for your app's use cases.

Elenco-dettagli

Wireframe del layout list-detail.

Il layout elenco-dettagli consente agli utenti di esplorare elenchi di elementi che contengono informazioni descrittive, esplicative o altre informazioni supplementari, ovvero i dettagli dell'elemento.

Il layout divide la finestra dell'app in due riquadri affiancati: uno per l'elenco e uno per i dettagli. Gli utenti selezionano gli elementi dall'elenco per visualizzarne i dettagli. I link diretti nei dettagli rivelano contenuti aggiuntivi nel riquadro dei dettagli.

I display con larghezza espansa (vedi Utilizzare le classi di dimensioni delle finestre) possono ospitare contemporaneamente sia l' elenco che i dettagli. La selezione di una voce dell'elenco aggiorna il riquadro dei dettagli per mostrare i contenuti correlati dell'elemento selezionato.

I display con larghezza media e compatta mostrano l'elenco o i dettagli, a seconda dell'interazione dell'utente con l'app. Quando è visibile solo l'elenco, la selezione di una voce dell'elenco mostra i dettagli al posto dell'elenco. Quando sono visibili solo i dettagli, se premi il pulsante Indietro viene visualizzato di nuovo l'elenco.

Le modifiche alla configurazione, come i cambiamenti di orientamento del dispositivo o delle dimensioni della finestra dell'app, possono modificare la classe di dimensioni della finestra del display. Un layout elenco-dettagli risponde di conseguenza, mantenendo lo stato dell'app:

  • Se un display con larghezza espansa che mostra sia l'elenco che i riquadri dei dettagli si restringe a una larghezza media o compatta, il riquadro dei dettagli rimane visibile e il riquadro dell'elenco viene nascosto.
  • Se un display con larghezza media o compatta ha visibile solo il riquadro dei dettagli e la classe di dimensioni della finestra si espande, l'elenco e i dettagli vengono mostrati insieme e l'elenco indica che è selezionato l'elemento corrispondente ai contenuti nel riquadro dei dettagli.
  • Se un display con larghezza media o compatta ha visibile solo il riquadro dell'elenco e si espande, l'elenco e un riquadro dei dettagli segnaposto vengono mostrati insieme.

list-detail è ideale per le app di messaggistica, i gestori di contatti, i browser di contenuti multimediali interattivi o qualsiasi app in cui i contenuti possono essere organizzati come un elenco di elementi che rivelano informazioni aggiuntive.

Figura 1. App di messaggistica che mostra un elenco di conversazioni e i dettagli di una conversazione selezionata.

Implementazione

A list-detail layout can be created with a variety of technologies, including Compose, views, and activity embedding (for legacy apps). See the Applicability section for help deciding which technology is most suitable for your app.

The SlidingPaneLayout library is designed for implementation of list‑detail layouts based on views or fragments.

First, declare a SlidingPaneLayout as the root element of your XML layout. Next, add the two child elements—either views or fragments—that represent the list and detail content.

Implement a communication methodology to pass data between the list-detail views or fragments. ViewModel is recommended because of its ability to store business logic and survive configuration changes.

SlidingPaneLayout automatically determines whether to display the list and detail together or individually. In a window that has enough horizontal space to accommodate both, the list and detail appear side by side. In a window that lacks sufficient space, either the list or detail is displayed depending on the user's interaction with the app.

For an example implementation, see the List-detail with sliding pane sample.

Incorporamento delle attività

Utilizza l'inserimento di attività per consentire alle app precedenti con più attività di mostrare due attività affiancate nella stessa schermata o una sopra l'altra. Se la tua app implementa l'elenco e i dettagli di un layout elenco-dettagli in attività separate, l'inserimento di attività ti consente di creare un layout elenco-dettagli con un refactoring del codice minimo o nullo.

Implementa l'inserimento di attività specificando una suddivisione della finestra delle attività utilizzando un file di configurazione XML. La suddivisione definisce l'attività principale, che avvia la suddivisione, e un'attività secondaria. Specifica la larghezza minima di visualizzazione per la suddivisione usando i punti di interruzione classe dimensioni finestra. Quando la larghezza del display scende al di sotto del breakpoint minimo, le attività vengono visualizzate una sopra l'altra. Ad esempio, se la larghezza minima del display è 600 dp, le attività vengono visualizzate una sopra l'altra sui display compatti, ma una accanto all'altra sui display medi e espansi.

L'inserimento di attività è supportato su Android 12L (livello API 32) e versioni successive, ma potrebbe essere disponibile anche su livelli API inferiori se implementato dai produttori di dispositivi. Quando l'incorporamento dell'attività non è disponibile su un dispositivo, il comportamento di riserva comporta l'attività dell'elenco o l'attività dei dettagli che occupa l'intera finestra dell'app in base all'interazione dell'utente con l'app.

Per maggiori informazioni, consulta la sezione Incorporamento delle attività.

Per un esempio di implementazione, consulta l'esempio List-detail with activity embedding.

Feed

Wireframe del layout del feed.

Un layout feed dispone gli elementi di contenuti equivalenti in una griglia configurabile per una visualizzazione rapida e comoda di una grande quantità di contenuti.

Le dimensioni e la posizione stabiliscono le relazioni tra gli elementi di contenuti.

I gruppi di contenuti vengono creati rendendo gli elementi delle stesse dimensioni e posizionandoli insieme. L'attenzione viene attirata sugli elementi rendendoli più grandi degli elementi vicini.

Le schede e gli elenchi sono componenti comuni dei layout feed.

Un layout feed supporta display di quasi tutte le dimensioni perché la griglia può adattarsi da una singola colonna scorrevole a un feed di contenuti scorrevole a più colonne.

I feed sono particolarmente adatti per le app di notizie e social media.

Figura 2. App di social media che mostra i post in schede di dimensioni diverse.

Implementazione

A RecyclerView efficiently renders a large number of items in a single column. A GridLayoutManager lays out items in a grid, allowing configuration of the item sizes and spans.

Configure the grid columns based on the size of the available display area to set the minimum allowable width for items.

The GridLayoutManager default spanning strategy, which is one span per item, can be overridden by creating a custom SpanSizeLookup. Adjust the span to emphasize some items over others.

On compact-width displays that have enough space for only one column, use LinearLayoutManager instead of GridLayoutManager.

For an example implementation, see the Feed with views sample.

Riquadro di supporto

Wireframe del layout del riquadro di supporto.

Il layout del riquadro di supporto organizza i contenuti dell'app in aree di visualizzazione primarie e secondarie.

L'area di visualizzazione principale occupa la maggior parte della finestra dell'app (in genere circa due terzi) e contiene i contenuti principali. L'area di visualizzazione secondaria è un riquadro che occupa la parte rimanente della finestra dell'app e presenta contenuti che supportano i contenuti principali.

I layout del riquadro di supporto funzionano bene sui display con larghezza espansa (vedi Utilizzare le classi di dimensioni delle finestre) in orientamento orizzontale. I display con larghezza media o compatta supportano la visualizzazione sia delle aree di visualizzazione primarie che secondarie se i contenuti sono adattabili a spazi di visualizzazione più stretti o se i contenuti aggiuntivi possono essere inizialmente nascosti in un foglio inferiore o laterale accessibile tramite un controllo come un menu o un pulsante.

Un layout del riquadro di supporto differisce da un layout elenco-dettagli nella relazione tra i contenuti primari e secondari. I contenuti del riquadro secondario sono significativi solo in relazione ai contenuti primari; ad esempio, una finestra degli strumenti del riquadro di supporto è irrilevante di per sé. I contenuti supplementari nel riquadro dei dettagli di un layout elenco-dettagli, tuttavia, sono significativi anche senza i contenuti primari, ad esempio la descrizione di un prodotto da una scheda di prodotto.

I casi d'uso del riquadro di supporto includono:

Figura 3. App di shopping con descrizioni dei prodotti in un riquadro di supporto.

Implementazione

A supporting pane layout is implemented using a helper layout such as LinearLayout or ConstraintLayout. Establish the window size classes that divide the amount of horizontal display space available for your app into three categories: compact (< 600dp), medium (>= 600dp), and expanded (>= 840dp).

For each window size class, define layouts as follows:

  • Compact: In the app resources layout folder, place content that renders the supporting pane below the main content or inside a bottom sheet
  • Medium: In the layout-w600dp folder, provide supporting pane content that results in the main content and supporting pane rendering side by side, splitting the horizontal display space equally
  • Expanded: In the layout-w840dp folder, include supporting pane content that results in the main content and supporting pane rendering side by side; however, the supporting pane takes up only 30% of the horizontal space, leaving the remaining 70% for the main content

Use a ViewModel for communication between the main content and the supporting pane whether using views, fragments, or a combination.

For implementation examples, see the following samples:

Applicability

The canonical layouts create multifaceted presentations of content for easy access and deep exploration. Use the following flowchart to determine which layout and implementation strategy is best for your app's use cases.

For examples of the canonical layouts implemented in different types of apps, see the large screen gallery.

Figure 4. Large screen canonical layout decision tree.

Risorse aggiuntive