La funzionalità Caratteri scaricabili consente alle API di richiedere i caratteri da un'applicazione del provider anziché aggregare i file nell'app o consentire all'app di scaricare i caratteri. I caratteri scaricabili sono disponibili sui dispositivi con API Android 14 e versioni successive tramite la libreria AndroidX Core.
I caratteri scaricabili offrono i seguenti vantaggi:
- Riduci le dimensioni dell'app, aumentando così il tasso di successo dell'installazione.
- Migliora lo stato generale del sistema, poiché più app possono condividere lo stesso carattere tramite un fornitore. In questo modo gli utenti risparmiano dati di rete mobile, memoria dello smartphone e spazio su disco. In questo modello, il carattere viene recuperato dalla rete quando necessario.
Come funzionano i caratteri scaricabili?
Un fornitore di caratteri è un'applicazione che recupera i caratteri e li memorizza nella cache locale in modo che altre app possano richiederli e condividerli. La figura seguente illustra la procedura.
Nozioni di base
Puoi utilizzare la funzionalità Caratteri scaricabili nei seguenti modi, descritti in dettaglio nelle sezioni successive:
- Utilizzare Android Studio e Google Play Services
- In modo programmatico
- Utilizzare la libreria AndroidX Core
Utilizzare i caratteri scaricabili con Android Studio e Google Play Services
Puoi impostare l'applicazione in modo che scarichi i caratteri utilizzando Android Studio 3.0 o versioni successive. Per aiutarti a iniziare a utilizzare le funzionalità dei caratteri scaricabili, puoi utilizzare il provider di caratteri dei servizi Google Play.
- Nell'editor di layout, seleziona un
TextView
. Poi, in Attributi, seleziona fontFamily > Altri caratteri. Viene visualizzata la finestra Risorse. - Nel menu Origine, seleziona Google Fonts.
- Nella casella Caratteri, seleziona un carattere nell'area "Scaricabili".
- Seleziona Crea carattere scaricabile e fai clic su OK.
Android Studio genera automaticamente i file XML pertinenti necessari per eseguire il rendering del carattere correttamente nella tua app.
Utilizzare i caratteri scaricabili in modo programmatico
A partire da Android 8.0 (livello API 26), AndroidX Core fornisce il supporto completo per i caratteri scaricabili. Per ulteriori informazioni sull'utilizzo della libreria AndroidX Core, consulta la sezione Libreria AndroidX Core per i caratteri scaricabili in questa pagina.
Per utilizzare la funzionalità dei caratteri scaricabili in modo programmatico, interagisci con due classi chiave:
android.graphics.fonts.FontRequest
: questo corso ti consente di creare una richiesta di font.FontsContractCompat
: questo tipo consente di creare un nuovo oggettoTypeface
in base alla richiesta di carattere.
L'app recupera i caratteri dal provider di caratteri utilizzando l'API FontsContract
. Ogni fornitore ha un proprio insieme di limitazioni relative alle versioni di Android e al linguaggio di query supportati. Per maggiori informazioni sulle versioni di Android e sul formato delle query, consulta la documentazione del tuo fornitore.
Per scaricare un carattere, completa i seguenti passaggi:
- Crea un'istanza della classe
android.graphics.fonts.FontRequest
per richiedere il carattere al fornitore. Per creare una richiesta, passa i seguenti parametri:- L'autorità del fornitore di caratteri.
- Il pacchetto del provider di caratteri per verificare l'identità del provider.
- La query di stringa del carattere. Per ulteriori informazioni sui formati delle query, consulta la documentazione del fornitore di caratteri, ad esempio Google Fonts.
- Un elenco di insiemi di hash per i certificati per verificare l'identità del provider.
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);
- Crea un'istanza della classe
FontsContract.FontRequestCallback
. - Sostituisci il metodo
onTypefaceRetrieved()
per indicare che la richiesta del carattere è completata. Fornisci il carattere recuperato come parametro. Puoi utilizzare questo metodo per impostare il carattere in base alle tue esigenze. Ad esempio, puoi impostare il carattere su unTextView
. - Sostituisci il metodo
onTypefaceRequestFailed()
per ricevere informazioni sugli errori nella procedura di richiesta dei caratteri. Per ulteriori informazioni sui codici di errore, consulta le costanti dei codici di errore. - Chiama il metodo
FontsContract.requestFont()
per recuperare il carattere dal fornitore. Il metodo avvia un controllo per determinare se il carattere esiste nella cache. Se il carattere non è disponibile localmente, chiama il fornitore del carattere, lo recupera in modo asincrono e passa il risultato al 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 carattere
- Un gestore per recuperare i caratteri in un thread
- Un'istanza della
classe
Il seguente codice di esempio illustra la procedura generale per i caratteri 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 ulteriori informazioni su come scaricare un carattere da un fornitore di caratteri, consulta l'app di esempio DownloadableFonts.
Utilizzare i caratteri scaricabili con AndroidX Core
AndroidX Core fornisce il supporto per la funzionalità dei caratteri scaricabili sui dispositivi con API Android 14 o versioni successive. Il
androidx.core.provider
pacchetto contiene le classi FontsContractCompat
e FontRequest
per implementare
il supporto della funzionalità dei caratteri scaricabili compatibile con le versioni precedenti. Le classi AndroidX contengono metodi simili ai metodi del framework e la procedura per scaricare i caratteri è simile a quella descritta nella sezione di questa pagina sull'utilizzo dei caratteri scaricabili tramite programmazione.
Per scaricare i caratteri utilizzando AndroidX, importa le classi FontsContractCompat
e
FontRequest
dal pacchetto androidx.core.provider
. Crea
istanze di queste classi anziché
le classi del framework FontsContract
e
android.graphics.fonts.FontRequest
.
Aggiungi la dipendenza AndroidX Core
Per utilizzare le classi FontsContractCompat
e FontRequest
, devi modificare le dipendenze del percorso di classe del progetto dell'app nell'ambiente di sviluppo.
Per aggiungere AndroidX Core al progetto dell'applicazione, aggiungi la seguente dipendenza al file build.gradle
dell'app:
Groovy
dependencies { ... implementation "androidx.core:core-ktx:2.2.0" }
Kotlin
dependencies { ... implementation("androidx.core:core-ktx:2.2.0") }
Utilizzare i caratteri scaricabili come risorse in XML
Android 8.0 (livello API 26) e AndroidX Core offrono un modo più rapido e pratico per dichiarare un carattere personalizzato come risorsa nel layout XML. Ciò significa che non è necessario raggruppare il carattere come asset. Puoi definire un carattere personalizzato per l'intero tema, che accelera l'usabilità per più spessori e stili, ad esempio grassetto, medio o sottile, se forniti.
- Crea un nuovo file XML nella cartella
res/font
. - Aggiungi un elemento principale
<font-family>
e imposta gli attributi relativi ai caratteri, come mostrato nel seguente file XML di esempio: - Fai riferimento al file come
@font/font_file_name
nel file XML del layout. Puoi anche utilizzare il metodogetFont()
per recuperare il file in modo programmatico, ad esempiogetFont(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>
Dichiarare in anticipo i caratteri nel file manifest
L'inflazione del layout e il recupero delle risorse sono attività sincrone. Per impostazione predefinita, il primo tentativo di recupero dei caratteri attiva una richiesta al fornitore di caratteri e, di conseguenza, aumenta il tempo del primo layout. Per evitare il ritardo, puoi pre-dichiarare i caratteri che devono essere recuperati nel manifest. Una volta che il sistema recupera il carattere dal provider, questo è disponibile immediatamente. Se il recupero del carattere richiede più tempo del previsto, il sistema interrompe il processo di recupero e utilizza il carattere predefinito.
Per pre-dichiarare i caratteri nel file manifest, completa i seguenti passaggi:
- Crea un array di risorse in
res/values/arrays.xml
e dichiara i caratteri che vuoi prelevare. - Utilizza un tag
meta-data
per dichiarare l'array di risorse nel 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" />
Aggiungi certificati
Quando un provider di caratteri non è preinstallato o se utilizzi la libreria AndroidX Core, dichiara i certificati con cui è firmato il provider di caratteri. Il sistema utilizza i certificati per verificare l'identità del fornitore di caratteri.
Per aggiungere i certificati, svolgi i seguenti passaggi:
- Crea un array di stringhe con i dettagli del certificato. Per ulteriori informazioni sui dettagli del certificato, consulta la documentazione del fornitore del carattere.
- Imposta l'attributo
fontProviderCerts
sull'array.
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="certs"> <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item> </string-array> </resources>
android:fontProviderCerts="@array/certs"