Share via


Creazione di risorse per schermi diversi

Android stesso viene eseguito su molti dispositivi diversi, ognuno con un'ampia gamma di risoluzioni, dimensioni dello schermo e densità dello schermo. Android eseguirà il ridimensionamento e il ridimensionamento per rendere l'applicazione funzionante su questi dispositivi, ma ciò potrebbe comportare un'esperienza utente non ottimale. Ad esempio, le immagini potrebbero apparire sfocate o potrebbero essere posizionate come previsto in una visualizzazione.

Concetti

Alcuni termini e concetti sono importanti per comprendere il supporto di più schermate.

  • Dimensioni schermo: quantità di spazio fisico per la visualizzazione dell'applicazione

  • Densità dello schermo: numero di pixel in qualsiasi area specificata sullo schermo. L'unità di misura tipica è costituita da punti per pollice (dpi).

  • Risoluzione : numero totale di pixel sullo schermo. Quando si sviluppano applicazioni, la risoluzione non è importante quanto le dimensioni e la densità dello schermo.

  • Pixel indipendente dalla densità (dp): unità virtuale di misura per consentire la progettazione dei layout indipendentemente dalla densità. Questa formula viene usata per convertire dp in pixel dello schermo:

    px = dp × dpi ÷ 160

  • Orientamento : l'orientamento dello schermo viene considerato orizzontale quando è più ampio di quello alto. Al contrario, l'orientamento verticale è quando lo schermo è più alto di quanto sia largo. L'orientamento può cambiare durante la durata di un'applicazione quando l'utente ruota il dispositivo.

Si noti che i primi tre di questi concetti sono correlati, aumentando la risoluzione senza aumentare la densità aumenterà le dimensioni dello schermo. Tuttavia, se la densità e la risoluzione sono aumentate, le dimensioni dello schermo possono rimanere invariate. Questa relazione tra dimensioni dello schermo, densità e risoluzione complica rapidamente il supporto dello schermo.

Per gestire questa complessità, il framework Android preferisce usare pixel indipendenti dalla densità (dp) per i layout dello schermo. Usando pixel indipendenti dalla densità, gli elementi dell'interfaccia utente appariranno all'utente per avere le stesse dimensioni fisiche sugli schermi con densità diverse.

Supporto di varie dimensioni e densità dello schermo

Android gestisce la maggior parte delle operazioni per eseguire correttamente il rendering dei layout per ogni configurazione dello schermo. Tuttavia, esistono alcune azioni che possono essere eseguite per aiutare il sistema a uscire.

L'uso di pixel indipendenti dalla densità anziché dei pixel effettivi nei layout è sufficiente nella maggior parte dei casi per garantire l'indipendenza della densità. Android ridimensiona le disegnare in fase di esecuzione in base alle dimensioni appropriate. Tuttavia, è possibile che il ridimensionamento causi la sfocatura delle bitmap. Per risolvere questo problema, fornire risorse alternative per le diverse densità. Quando si progettano dispositivi per più risoluzioni e densità dello schermo, sarà più facile iniziare con le immagini ad alta risoluzione o densità e quindi ridurre le prestazioni.

Dichiarare le dimensioni dello schermo supportate

La dichiarazione delle dimensioni dello schermo garantisce che solo i dispositivi supportati possano scaricare l'applicazione. Questa operazione viene eseguita impostando l'elemento supports-screen nel file AndroidManifest.xml . Questo elemento viene usato per specificare le dimensioni dello schermo supportate dall'applicazione. Una determinata schermata è considerata supportata se l'applicazione può posizionare correttamente i layout per riempire lo schermo. Usando questo elemento manifesto, l'applicazione non verrà visualizzata in Google Play per i dispositivi che non soddisfano le specifiche dello schermo. Tuttavia, l'applicazione verrà comunque eseguita nei dispositivi con schermi non supportati, ma i layout potrebbero apparire sfocati e pixelati.

Le schermate sei supportate vengono dichiarate nel file Properites/AndroidManifest.xml della soluzione:

Modificare AndroidManifest.xml per includere le schermate di supporto:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          android:versionCode="1"
          android:versionName="1.0"
          package="HelloWorld.HelloWorld">
      <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="27" />
      <supports-screens android:resizable="true"
                        android:smallScreens="true"
                        android:normalScreens="true"
                        android:largeScreens="true" />
      <application android:allowBackup="true"
                   android:icon="@mipmap/ic_launcher"
                   android:label="@string/app_name"
                   android:roundIcon="@mipmap/ic_launcher_round"
                   android:supportsRtl="true" android:theme="@style/AppTheme">
  </application>
</manifest>

Fornire layout alternativi per dimensioni dello schermo diverse

I layout alternativi consentono di personalizzare una visualizzazione per una dimensione specifica dello schermo, modificando il posizionamento o le dimensioni degli elementi dell'interfaccia utente del componente.

A partire dal livello API 13 (Android 3.2), le dimensioni dello schermo sono deprecate a favore dell'uso del qualificatore swNdp. Questo nuovo qualificatore dichiara la quantità di spazio necessaria per un determinato layout. È consigliabile che le applicazioni progettate per l'esecuzione in Android 3.2 o versione successiva usino questi qualificatori più recenti.

Ad esempio, se un layout richiede un minimo di 700 dp di larghezza dello schermo, il layout alternativo verrà spostato in un layout di cartella sw700dp:

Come linea guida, ecco alcuni numeri per vari dispositivi:

  • Telefono tipico - 320 dp: un telefono tipico

  • Un tablet da 5" / "tweener" dispositivo – 480 dp: ad esempio Samsung Note

  • Un tablet da 7" – 600 dp: come barnes & Noble Nook

  • Un tablet da 10" – 720 dp: come motorola Xoom

Per le applicazioni destinate ai livelli API fino a 12 (Android 3.1), i layout devono entrare nelle directory che usano i qualificatori piccoli/xlarge normali come//generalizzazioni delle varie dimensioni dello schermo disponibili nella maggior parte dei dispositivi. Nell'immagine seguente, ad esempio, sono disponibili risorse alternative per le quattro diverse dimensioni dello schermo:

Di seguito è riportato un confronto tra i qualificatori di dimensioni dello schermo precedenti di livello 13 pre-API rispetto ai pixel indipendenti dalla densità:

  • 426 dp x 320 dp è piccolo

  • 470 dp x 320 dp è normale

  • 640 dp x 480 dp è grande

  • 960 dp x 720 dp is xlarge

I qualificatori di dimensioni dello schermo più recenti nel livello API 13 e versioni successive hanno una precedenza maggiore rispetto ai qualificatori di schermata precedenti dei livelli API 12 e inferiori. Per le applicazioni che si estenderanno sui livelli precedenti e sui nuovi livelli di API, potrebbe essere necessario creare risorse alternative usando entrambi i set di qualificatori, come illustrato nello screenshot seguente:

Fornire bitmap diverse per densità dello schermo diverse

Anche se Android ridimensiona le bitmap in base alle esigenze per un dispositivo, le bitmap stesse potrebbero non aumentare o ridurre in modo elegante: possono diventare fuzzy o sfocate. Fornire bitmap appropriate per la densità dello schermo ridurrà questo problema.

Ad esempio, l'immagine seguente è un esempio di problemi di layout e aspetto che possono verificarsi quando non vengono fornite risorse di specificare densità.

Screenshots without density resources

Confrontarlo con un layout progettato con risorse specifiche della densità:

Screenshots with density-specific resources

Creare risorse di densità variabili con Android Asset Studio

La creazione di queste bitmap di varie densità può essere un po ' noioso. Di conseguenza, Google ha creato un'utilità online che può ridurre alcuni dei tedium coinvolti nella creazione di queste bitmap denominate Android Asset Studio.

Android Asset Studio

Questo sito Web consentirà di creare bitmap destinate alle quattro densità comuni dello schermo fornendo un'unica immagine. Android Asset Studio creerà quindi le bitmap con alcune personalizzazioni e le consentirà di scaricarle come file ZIP.

Suggerimenti per più schermi

Android viene eseguito su un numero sconcertante di dispositivi e la combinazione di dimensioni dello schermo e densità dello schermo può sembrare travolgente. I suggerimenti seguenti consentono di ridurre al minimo il lavoro necessario per supportare vari dispositivi:

  • Solo progettare e sviluppare per ciò di cui hai bisogno : ci sono molti dispositivi diversi là fuori, ma alcuni esistono in rari fattori di forma che possono richiedere un notevole sforzo per progettare e sviluppare. Il dashboard Dimensioni schermo e densità è una pagina fornita da Google che fornisce i dati sulla suddivisione della matrice di densità dello schermo/schermo. Questa suddivisione fornisce informazioni dettagliate su come sviluppare le attività di sviluppo sulle schermate di supporto.

  • Usare I provider di dati anziché pixel: i pixel diventano problematici man mano che cambia la densità dello schermo. Non impostare i valori di pixel hardcoded. Evitare pixel a favore di dp (pixel indipendenti dalla densità).

  • EvitareAbsoluteLayoutladdove possibile: è deprecato nel livello API 3 (Android 1.5) e genera layout fragili. Non deve essere usato. Provare invece a usare widget di layout più flessibili, ad esempio LinearLayout, RelativeLayout o il nuovo GridLayout.

  • Selezionare un orientamento del layout come predefinito : ad esempio, invece di fornire le risorse alternative layout-land e layout-port, inserire le risorse per il panorama orizzontale nel layout e le risorse per il verticale in layout-porta.

  • Usare LayoutParams per Height e Width : quando si definiscono gli elementi dell'interfaccia utente in un file di layout XML, un'applicazione Android che usa i valori wrap_content e fill_parent avrà maggiore successo garantisce un aspetto corretto tra dispositivi diversi rispetto all'uso di unità indipendenti dal pixel o dalla densità. Questi valori delle dimensioni determinano la scalabilità delle risorse bitmap di Android in base alle esigenze. Per questo stesso motivo, le unità indipendenti dalla densità sono meglio riservate per quando si specificano i margini e la spaziatura interna degli elementi dell'interfaccia utente.

Test di più schermate

Un'applicazione Android deve essere testata su tutte le configurazioni che saranno supportate. Idealmente, i dispositivi devono essere testati sui dispositivi effettivi, ma in molti casi questo non è possibile o pratico. In questo caso, l'uso dell'emulatore e della configurazione dei dispositivi virtuali Android per ogni configurazione del dispositivo sarà utile.

Android SDK fornisce alcune interfacce dell'emulatore che possono essere usate per creare avD replicare le dimensioni, la densità e la risoluzione di molti dispositivi. Molti dei fornitori di hardware forniscono anche interfacce per i loro dispositivi.

Un'altra opzione consiste nell'usare i servizi di un servizio di test di terze parti. Questi servizi accettano un APK, lo eseguiranno in molti dispositivi diversi e quindi forniranno commenti e suggerimenti sul funzionamento dell'applicazione.