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.
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.
- Nell’Editor di layout, seleziona una TextView, e poi sotto Proprietà, seleziona fontFamily > Altri font.
Appare la finestra Resources.
- Nell’elenco a discesa Source, selezionare Google Fonts.
- Nella casella Fonts, selezionare un font.
- Selezionare Create downloadable font e cliccare OK.
Nota: Per inserire il font nella vostra app, selezionate Add font to project.
Android Studio genera automaticamente i file XML necessari per rendere correttamente il font nella vostra app.
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 oggettoTypeface
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:
- 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.
- Crea un’istanza della classe
FontsContract.FontRequestCallback
. - 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 unTextView
- 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 metodoerror code constants
. - 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.
- un’istanza della classe
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:
- Aprire il file
build.gradle
della propria applicazione. - 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.
- Crea un nuovo file XML nella cartella
res/font
. - Aggiungi l’elemento radice
<font-family>
e imposta gli attributi relativi al font come mostrato nel seguente file XML di esempio: - 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)
.
<?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>
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:
- Crea un array di risorse in
res/values/arrays.xml
e dichiara i font scaricabili che vuoi pre-caricare. - Utilizza un tag
meta-data
per dichiarare l’array di risorse nel tuo manifest.
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>
<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:
- 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.
- Imposta l’attributo
fontProviderCerts
all’array.
<?xml version="1.0" encoding="utf-8"?><resources> <string-array name="certs"> <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item> </string-array></resources>
android:fontProviderCerts="@array/certs"
Nota: Se il provider ha più di un set di certificati, è possibile definire un array di array di stringhe.