Font scaricabili

Android 8.0 (livello API 26) e Android Support Library 26 introducono il supporto per le API per richiedere i font da un’applicazione provider invece di inserire i file nell’APK o lasciare che l’APK scarichi i font. La funzione è disponibile sui dispositivi che eseguono le versioni API di Android 14 e superiori attraverso la Support Library 26.

La funzione Font scaricabili offre i seguenti vantaggi:

  • Riduce le dimensioni dell’APK
  • Aumenta il tasso di successo dell’installazione delle app
  • Migliora la salute generale del sistema poiché più APK possono condividere lo stesso font attraverso un provider. Questo fa risparmiare agli utenti dati cellulari, memoria del telefono e spazio su disco. In questo modello, il font viene recuperato attraverso la rete quando necessario.

Fare riferimento alle seguenti risorse correlate:

  • Font scaricabili app di esempio Java | Kotlin

Come funzionano i font scaricabili?

Un font provider è un’applicazione che recupera i font e li memorizza nella cache locale in modo che altre app possano richiedere e condividere i font. La figura 1 illustra il processo.

Componenti principali del processo Emoji compat
Figura 1. Processo dei font scaricabili

Le basi

Puoi usare la funzione dei font scaricabili nei seguenti modi:

  • attraverso Android Studio e Google Play Services
  • programmaticamente
  • attraverso la libreria di supporto

Utilizzare i font scaricabili attraverso Android Studio e Google Play services

Puoi impostare la tua applicazione per scaricare i font utilizzando Android Studio 3.0 o superiore. Per aiutarti a iniziare con le funzioni dei font scaricabili, puoi usare il fornitore di font dai servizi Google Play.

Nota: un dispositivo deve avere i servizi Google Play versione 11 o superiore per usare il provider Google Fonts.

  1. Nell’Editor di layout, seleziona una TextView, e poi sotto Proprietà, seleziona fontFamily > Altri font.
    Layout Editor
    Figura 2. Utilizzo dell’editor di layout

    Appare la finestra Resources.

  2. Nell’elenco a discesa Source, selezionare Google Fonts.
  3. Nella casella Fonts, selezionare un font.
  4. Selezionare Create downloadable font e cliccare OK.

    Nota: Per inserire il font nella vostra app, selezionate Add font to project.

    Layout editor
    Figura 3. Selezione del font dalla finestra Risorse
  5. Android Studio genera automaticamente i file XML necessari per rendere correttamente il font nella vostra app.

    Editore del layout
    Figura 4. Anteprima del file di font

Utilizzo programmatico dei font scaricabili

Prima di Android 8.0 (livello API 26), la libreria di supporto 26.0 fornisce pieno supporto per i font scaricabili. Per maggiori informazioni sull’uso della libreria di supporto, vai alla sezione Libreria di supporto dei font scaricabili.

Per utilizzare programmaticamente la funzionalità dei font scaricabili, è necessario interagire con due classi chiave:

  • android.graphics.fonts.FontRequest: Questa classe consente di creare una richiesta di font.
  • FontsContract: Questa classe permette di creare un nuovo oggetto Typeface basato sulla richiesta di font.

La vostra applicazione recupera i font dal font provider utilizzando le FontsContract API. Ogni provider ha il proprio set di restrizioni sulle versioni di Android e sul linguaggio di interrogazione che supporta. Per maggiori informazioni sulle versioni di Android e sul formato di interrogazione, fare riferimento alla documentazione del proprio provider.

Per scaricare un font, eseguire i seguenti passi:

  1. Creare un’istanza della classe android.graphics.fonts.FontRequest per richiedere il font dal provider. Per creare una richiesta, passare i seguenti parametri:
    • L’autorità del fornitore di font
    • Il pacchetto del fornitore di font per verificare l’identità del fornitore
    • La query stringa del font. Per maggiori informazioni sui formati delle query, consultare la documentazione del proprio fornitore di font, come Google Fonts.
    • Un elenco di set di hash per i certificati per verificare l’identità del fornitore.

      Nota: Non c’è bisogno di aggiungere un certificato se si richiedono font da provider preinstallati. Tuttavia, devi sempre fornire un certificato se richiedi i font attraverso la libreria di supporto.

    Kotlin

    val request = FontRequest( "com.example.fontprovider.authority", "com.example.fontprovider", "my font", certs)

    Java

    FontRequest request = new FontRequest("com.example.fontprovider", "com.example.fontprovider", "my font", certs);

    Nota: Puoi ricevere i valori dei parametri dal tuo fornitore di font. Android Studio popola automaticamente questi valori per i provider che supporta nella sua UI.

  2. Crea un’istanza della classe FontsContract.FontRequestCallback.
  3. Override il metodo onTypefaceRetrieved() per indicare che la richiesta del font è completa. Fornire il font recuperato come parametro. È possibile utilizzare questo metodo per impostare il font, se necessario. Per esempio, potete impostare il font su un TextView
  4. Overdite il metodo onTypefaceRequestFailed() per ricevere informazioni sugli errori nel processo di richiesta del font. Per maggiori informazioni sui codici di errore, fare riferimento al metodo error code constants.
  5. Chiamare il metodo FontsContract.requestFont() per recuperare il font dal fornitore di font. Il metodo avvia un controllo per determinare se il font esiste nella cache. Se il font non è disponibile localmente, chiama il fornitore di font, recupera il font in modo asincrono e passa il risultato alla callback. Passa i seguenti parametri:
    • un’istanza della classe Context
    • un’istanza della classe android.graphics.fonts.FontRequest
    • un callback per ricevere i risultati della richiesta del font
    • un gestore per recuperare i font su un thread
    • Nota: assicurarsi che questo gestore non sia il gestore del thread dell’interfaccia utente.

Il seguente codice di esempio illustra il processo complessivo dei font scaricabili:

Kotlin

val request = FontRequest( "com.example.fontprovider.authority", "com.example.fontprovider", "my font", certs)val callback = object : FontsContract.FontRequestCallback() { override fun onTypefaceRetrieved(typeface: Typeface) { // Your code to use the font goes here ... } override fun onTypefaceRequestFailed(reason: Int) { // Your code to deal with the failure goes here ... }}FontsContract.requestFonts(context, request, handler, null, callback)

Java

FontRequest request = new FontRequest("com.example.fontprovider.authority", "com.example.fontprovider", "my font", certs);FontsContract.FontRequestCallback callback = new FontsContract.FontRequestCallback() { @Override public void onTypefaceRetrieved(Typeface typeface) { // Your code to use the font goes here ... } @Override public void onTypefaceRequestFailed(int reason) { // Your code to deal with the failure goes here ... }};FontsContract.requestFonts(context, request, handler, null, callback);

Per maggiori informazioni su come scaricare un font da un fornitore di font, vedere l’applicazione di esempio Font scaricabili Java | Kotlin.

Utilizzare i font scaricabili tramite la libreria di supporto

La libreria di supporto 26 fornisce il supporto alla funzione Font scaricabili sui dispositivi che eseguono Android API versione 14 o superiore. Il pacchetto android.support.v4.provider contiene le classi FontsContractCompat e FontRequest per implementare il supporto alla funzione Font scaricabili compatibile con le versioni precedenti. Le classi della libreria di supporto contengono metodi simili al framework. Anche il processo di scaricamento dei font è simile a quello menzionato nella sezione Scaricare i font.

Per scaricare i font usando la libreria di supporto, importa le classi FontsContractCompat e FontRequest dal pacchetto android.support.v4.provider. Create le istanze di queste classi al posto delle classi del framework FontsContract e android.graphics.fonts.FontRequest.

Nota: è necessario fornire un certificato quando si richiedono i font attraverso la libreria di supporto. Questo vale anche per i fornitori di font preinstallati.

Aggiungere la dipendenza della libreria di supporto

Per utilizzare le classi FontsContractCompat e FontRequest, devi modificare le dipendenze del classpath del tuo progetto di app nel tuo ambiente di sviluppo.

Per aggiungere una libreria di supporto al tuo progetto di applicazione:

  1. Aprire il file build.gradle della propria applicazione.
  2. Aggiungere la libreria di supporto alla sezione dependencies.
dependencies { ... compile "com.android.support:support-compat:28.0.0"}

Utilizzare i font scaricabili come risorse in XML

Android 8.0 (livello API 26) e Support Library 26 offrono un modo più veloce e comodo per dichiarare un font personalizzato come risorsa nel layout XML. Questo significa che non c’è bisogno di impacchettare il font come risorsa. È possibile definire un font personalizzato per l’intero tema, il che accelera l’usabilità per pesi e stili multipli, come Bold, Medium o Light, quando previsto.

  1. Crea un nuovo file XML nella cartella res/font.
  2. Aggiungi l’elemento radice <font-family> e imposta gli attributi relativi al font come mostrato nel seguente file XML di esempio:
  3. <?xml version="1.0" encoding="utf-8"?><font-family xmlns:android="http://schemas.android.com/apk/res/android" android:fontProviderAuthority="com.example.fontprovider.authority" android:fontProviderPackage="com.example.fontprovider" android:fontProviderQuery="example font" android:fontProviderCerts="@array/certs"></font-family>
  4. Riferimento al file come @font/font_file_name nel file XML del layout. Puoi anche usare il metodo getFont() per recuperare il file programmaticamente. Per esempio, getFont(R.font.font_file_name).

Pre-dichiarare i font nel manifest

L’inflazione del layout e il recupero delle risorse sono compiti sincroni. Per impostazione predefinita, il primo tentativo di recuperare i font innesca una richiesta al fornitore di font, e quindi aumenta il tempo del primo layout. Per evitare il ritardo, puoi pre-dichiarare i font che devono essere recuperati nel tuo manifesto. Dopo che il sistema recupera il font dal provider, è disponibile immediatamente. Se il recupero dei font richiede più tempo del previsto, il sistema interrompe il processo di recupero e utilizza il font predefinito.

Per pre-dichiarare i font nel manifest, esegui i seguenti passi:

  1. Crea un array di risorse in res/values/arrays.xml e dichiara i font scaricabili che vuoi pre-caricare.
  2. res/values/arrays.xml<?xml version="1.0" encoding="utf-8"?><resources> <array name="preloaded_fonts"> <item>@font/font1</item> <item>@font/font2</item> </array></resources>
  3. Utilizza un tag meta-data per dichiarare l’array di risorse nel tuo manifest.
  4. <meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" />

Aggiungere i certificati

Quando un font provider non è preinstallato o se stai usando la libreria di supporto, devi dichiarare i certificati con cui il font provider è firmato. Il sistema utilizza i certificati per verificare l’identità del fornitore di font.

Nota: Android Studio può popolare automaticamente i valori per il fornitore di servizi Google Play se usi lo strumento di selezione dei font in Android Studio. Per maggiori informazioni sull’uso di Android Studio per scaricare i font, vai alla sezione Usare i font scaricabili tramite Android Studio e i servizi Google Play.

Esegui i seguenti passi per aggiungere i certificati:

  1. Crea un array di stringhe con i dettagli del certificato. Per maggiori informazioni sui dettagli del certificato, fate riferimento alla documentazione del vostro fornitore di font.
  2. <?xml version="1.0" encoding="utf-8"?><resources> <string-array name="certs"> <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item> </string-array></resources>
  3. Imposta l’attributo fontProviderCerts all’array.
  4. android:fontProviderCerts="@array/certs"

    Nota: Se il provider ha più di un set di certificati, è possibile definire un array di array di stringhe.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *