ChromeOS supporta le app per Android in più finestre. Il sistema esegue il rendering delle app in container finestra le cui dimensioni sono determinate dal fattore di forma da dispositivo mobile, come mostrato nella figura 1.
È importante progettare layout che funzionino con schermi di dimensioni diverse. Se seguire le linee guida di Android per supportare schermi dimensioni, anche la tua app funziona bene durante l'esecuzione su ChromeOS.
Questa pagina mostra come assicurarsi che la finestra dell'app si avvii correttamente, si ridimensiona in modo fluido e ne mostra tutti i contenuti quando le dimensioni cambiano.
Dimensioni lancio iniziale
Le app possono richiedere le dimensioni di avvio iniziali nei seguenti modi:
- Utilizza una dimensione di lancio solo in ambienti desktop.
Questo aiuta il gestore delle finestre a darti i limiti appropriati
orientamento. Per indicare una preferenza quando utilizzata in modalità desktop, aggiungi
i seguenti meta tag all'interno
<activity>
:
<meta-data android:name="WindowManagerPreference:FreeformWindowSize" android:value="[phone|tablet|maximize]" /> <meta-data android:name="WindowManagerPreference:FreeformWindowOrientation" android:value="[portrait|landscape]" />
- Usa limiti di avvio statici. Utilizza
<layout>
all'interno della voce manifest del tuo attività per specificare un valore "fisso" dimensione iniziale, come nell'esempio seguente:
<layout android:defaultHeight="500dp" android:defaultWidth="600dp" android:gravity="top|end" android:minHeight="450dp" android:minWidth="300dp" />
- Usa limiti di lancio dinamici. Un'attività può creare e utilizzare
ActivityOptions.setLaunchBounds(Rect)
quando viene creata una nuova attività. Di specificando un rettangolo vuoto, l'app può essere massimizzata.
Ridimensionare le finestre
In ChromeOS, gli utenti possono ridimensionare la finestra di un'app nel solito modo: trascinando nell'angolo inferiore destro, come mostrato nella figura 2.
Esistono due opzioni per gestire il ridimensionamento delle finestre quando utilizzi il
View
corso:
- Rispondi in modo dinamico alle modifiche alla configurazione chiamando
onConfigurationChanged(..)
. Ad esempio, puoi aggiungereandroid:configChanges="screenSize|smallestScreenSize|orientation|screenLayout"
al file manifest dell'attività. Per saperne di più sulla gestione delle modifiche alla configurazione, consulta Gestione delle modifiche alla configurazione. - Consenti al sistema di riavviare l'attività. In questo caso, implementa
onSaveInstanceState
e utilizza l'architettura ViewModel componente per ripristinare la precedente stato salvato.
Quando utilizzi Jetpack Compose, il comportamento di ridimensionamento dipende come è configurata la tua attività. Se gestisce le modifiche in modo dinamico, la ricomposizione viene attivata quando le dimensioni della finestra cambiano. Se l'attività è riavviato dal sistema, avviene una composizione iniziale dopo il riavvio. Entrambi è importante creare layout di Compose che si adattino al mutare delle finestre dimensioni. Non utilizzare dimensioni fisse.
Dimensioni finestra
Fai leggere alle tue attività le dimensioni della finestra a ogni inizio e e di organizzarne i contenuti in base alla configurazione attuale.
Per determinare la configurazione attuale, chiama getResources().getConfiguration()
sull'attività corrente. Non utilizzare
dell'attività in background o della risorsa di sistema.
L'attività in background non ha una dimensione e la configurazione di sistema potrebbe
contiene più finestre con dimensioni e orientamenti in conflitto, pertanto non è utilizzabile
estrarre i dati.
Tieni presente che le dimensioni della finestra e dello schermo non corrispondono. Per ottenere
dimensioni della finestra in DP, utilizza Activity.getResources().getConfiguration().screenWidth
e Activity.getResources().getConfiguration().screenHeight
. Probabilmente
non hanno mai bisogno di usare
le dimensioni dello schermo.
Limiti dei contenuti
I limiti dei contenuti di una finestra possono cambiare dopo il ridimensionamento. Ad esempio, l'area all'interno la finestra usata dall'app può cambiare se diventa troppo grande per per adattarsi allo schermo. Segui queste linee guida:
- Le app che usano il processo di layout di Android vengono disposte automaticamente nello spazio disponibile.
Le app native devono leggere l'area disponibile e monitorare le modifiche alle dimensioni per evitare elementi UI inaccessibili. Chiama i seguenti metodi per determinare dimensione iniziale disponibile per questa piattaforma:
NativeActivity.mLastContent[X/Y/Width/Height]()
findViewById(android.R.id.content).get[Width/Height]()
Il monitoraggio continuo può essere effettuato utilizzando un osservatore:
NativeActivity.onContentRectChangedNative()
NativeActivity.onGlobalLayout()
- Aggiungi un listener a
view.addOnLayoutChangeListener(findViewById(android.R.id.content))
Se l'app sta pre-scalando l'artwork, fallo ogni volta che cambia la risoluzione.
Ridimensionamento in formato libero
ChromeOS consente di ridimensionare liberamente qualsiasi finestra: l'utente può modificare larghezza, altezza e posizione sullo schermo. Molte app Android sono scritte senza il ridimensionamento in formato libero. Considera questi problemi:
- La posizione dello schermo potrebbe cambiare. Utilizza sempre per eseguire trasformazioni delle coordinate da finestra a schermo e da schermo a finestra.
- Se utilizzi il sistema di visualizzazione di Android, il layout delle finestre cambia automaticamente quando le sue dimensioni cambiano.
- Se non usi il sistema di visualizzazione e assumi il controllo dell'area, l'app deve gestire autonomamente le modifiche alle dimensioni.
- Per le app native, utilizza i membri
mLastContent
o la visualizzazione dei contenuti per per determinare la dimensione iniziale. - Quando l'app è in esecuzione, ascolta
onContentRectChangedNative
oonGlobalLayout
eventi per reagire alle variazioni delle dimensioni. - Quando le dimensioni dell'app cambiano, ridimensiona o ricarica i layout e l'artwork e aggiornare le aree di input.
Modalità a schermo intero
La modalità a schermo intero funziona come quella disponibile sui dispositivi Android. Se la finestra non copre l'intero schermo, viene richiesto il filtro completo (nascondere tutti gli elementi UI di sistema) vengono ignorati. Quando l'app è ingrandita vengono eseguiti i normali metodi, i layout e le funzioni a schermo intero. In questo modo gli elementi dell'interfaccia utente di sistema (barra di controllo della finestra e la barra delle app) vengono nascosti.
Orientamento schermo
L'orientamento più comune in un'app Android è l'orientamento verticale, in quanto la maggior parte dei telefoni viene trattenuta. Un ritratto è un ottimo modo per i telefoni, ma è pessimo per laptop e tablet, dove è preferibile l'orientamento orizzontale. Per ottenere i migliori risultati per la tua app, valuta la possibilità di supportare entrambi gli orientamenti.
Alcune app Android presuppongono che quando un dispositivo viene tenuto in modalità verticale,
il valore di rotazione è
Surface.ROTATION_0
.
Questo potrebbe essere vero per la maggior parte dei dispositivi Android. Tuttavia, quando l'app è in una
certo
modalità ARC,
il valore di rotazione per l'orientamento verticale potrebbe non essere
Surface.ROTATION_0
.
Per ottenere un valore di rotazione preciso durante la lettura dell'accelerometro o di funzioni simili
utilizza i sensori di Display.getRotation()
e scambiare l'asse di conseguenza.
L'attività principale e l'orientamento
Una finestra di Chromebook è composta da uno stack di finestre di attività. Ogni finestra nello stack hanno le stesse dimensioni e lo stesso orientamento.
Le modifiche improvvise di orientamento e dimensioni creano confusione su un computer completamente gestito di Google Cloud. La gestione finestre di Chromebook evita questo problema in un modo simile alla modalità affiancata di Android: l'attività in fondo allo stack controlla gli attributi di tutte le attività precedenti. Ciò può portare a situazioni impreviste dove un'attività appena iniziata che è verticale e non ridimensionabile diventa orizzontale e ridimensionabili.
La modalità dispositivo influisce qui: in modalità tablet, l'orientamento non è bloccato e ogni finestra mantiene il proprio orientamento, come in genere su Android.
Linee guida per l'orientamento
Segui queste linee guida per la gestione dell'orientamento:
- Se supporti un solo orientamento, aggiungi le informazioni al file manifest in modo che che il gestore delle finestre ne sia a conoscenza prima di avviare l'applicazione. Quando specificare l'orientamento e, se possibile, anche gli orientamenti del sensore. I Chromebook sono spesso convertibili e un'app capovolta costituisce un'esperienza utente negativa.
- Cerca di mantenere un singolo orientamento selezionato. Evita di richiedere un orientamento nel manifest e impostarne un altro in modo programmatico in un secondo momento.
- Fai attenzione a cambiare l'orientamento in base alle dimensioni della finestra. L'utente potrebbe ricevere è bloccata in una piccola finestra verticale e non riesce a tornare a una finestra più grande finestra orizzontale.
- In Chrome sono disponibili dei controlli per le finestre che ti consentono di scegliere tra tutte le opzioni disponibili. layout. Scegliendo l'opzione di orientamento corretta, puoi assicurarti che l'utente abbia il layout corretto dopo l'avvio dell'app. Se un'app è disponibile in verticale e orizzontale, impostale su orizzontale, se possibile, per impostazione predefinita. Una volta impostata questa opzione, viene ricordato per le singole app.
- Cerca di evitare modifiche non necessarie di orientamento. Ad esempio, se l'attività
l'orientamento è verticale, ma l'app chiama
setRequestedOrientation(LANDSCAPE)
in fase di runtime, ciò causa un ridimensionamento della finestra non necessario, fastidioso all'utente e potrebbe riavviare l'app, ma non riesce a gestirla. È meglio impostare l'orientamento una sola volta, ad esempio nel manifest, e lo modifichi solo se necessario.
Altre considerazioni
Di seguito sono riportati altri aspetti da considerare quando si utilizzano le app Android in ChromeOS:
- Non chiamare
finish()
nel metodoonDestroy
della tua attività. Questo fa sì che chiuderla al momento del ridimensionamento e non riavviarla. - Non utilizzare tipi di finestre non compatibili, ad esempio
TYPE_KEYGUARD
eTYPE_APPLICATION_MEDIA
. - Accelera il riavvio dell'attività memorizzando nella cache gli oggetti che sono stati allocati in precedenza.
- Se non vuoi che l'utente ridimensiona la tua app, specifica
android:resizeableActivity=false
nel file manifest. - Testa l'app per assicurarti che gestisca le modifiche apportate dalle dimensioni della finestra in modo appropriato.