La funzionalità Caratteri scaricabili consente alle API di richiedere i caratteri da un'applicazione provider anziché raggruppare 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:
- Riduce le dimensioni dell'app, aumentando di conseguenza la percentuale di successo dell'installazione dell'app.
- Migliora l'integrità complessiva del sistema, poiché più app possono condividere lo stesso carattere tramite un provider. In questo modo si risparmiano dati cellulare, memoria e spazio su disco dell'utente. In questo modello, il carattere viene recuperato sulla rete quando necessario.
Come funzionano i caratteri scaricabili?
Un fornitore di caratteri è un'applicazione che recupera i caratteri e li memorizza nella cache localmente 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, che verranno descritti dettagliatamente nelle sezioni successive:
- Utilizzo di 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 con Android Studio 3.0 o versioni successive. Per iniziare a utilizzare le funzionalità Caratteri scaricabili, puoi utilizzare il fornitore di caratteri di Google Play Services.
- Nell'Editor layout, seleziona un
TextView
. Quindi, in Attributi, seleziona Famiglia di caratteri > 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 visualizzare correttamente il carattere nell'app.
Utilizza i caratteri scaricabili in modo programmatico
A partire da Android 8.0 (livello API 26), AndroidX Core offre il supporto completo per i caratteri scaricabili. Per maggiori informazioni sull'utilizzo della libreria AndroidX Core, consulta la sezione relativa alla libreria AndroidX Core per i caratteri scaricabili in questa pagina.
Per utilizzare la funzionalità Caratteri scaricabili in modo programmatico, interagisci con due classi chiave:
android.graphics.fonts.FontRequest
: questa classe consente di creare una richiesta relativa al carattere.FontsContractCompat
: questa classe consente di creare un nuovo oggettoTypeface
in base alla richiesta di carattere.
L'app recupera i caratteri dal fornitore utilizzando l'API FontsContract
. Ogni provider ha il proprio insieme di limitazioni sulle versioni di Android e sul linguaggio di query supportato. Per
ulteriori informazioni sulle versioni Android e sul formato delle query, consulta la documentazione
del tuo provider.
Per scaricare un carattere, procedi nel seguente modo:
- Crea un'istanza della classe
android.graphics.fonts.FontRequest
per richiedere il carattere al provider. Per creare una richiesta, passa i seguenti parametri:- L'autorità del fornitore dei caratteri.
- Il pacchetto del provider di caratteri per verificare l'identità del provider.
- La query stringa del carattere. Per ulteriori informazioni sui formati delle query, consulta la documentazione del fornitore di caratteri, ad esempio Google Fonts.
- Un elenco di set di hash per i certificati al fine di 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
. - Esegui l'override del metodo
onTypefaceRetrieved()
per indicare che la richiesta del carattere è stata completata. Fornisci come parametro il carattere recuperato. Puoi utilizzare questo metodo per impostare il carattere in base alle tue esigenze. Ad esempio, puoi impostare il carattere suTextView
. - Sostituisci il metodo
onTypefaceRequestFailed()
per ricevere informazioni sugli errori nella procedura di richiesta dei caratteri. Per saperne di più 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, viene chiamato il fornitore del carattere, recupera il carattere in modo asincrono e passa il risultato al callback. Trasmetti i seguenti parametri:- Un'istanza della classe
Context
- Un'istanza della classe
android.graphics.fonts.FontRequest
- Un callback per ricevere i risultati della richiesta di carattere
- Un gestore per il recupero dei 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, vedi l'app di esempio DownloadableFonts.
Utilizzare i caratteri scaricabili con AndroidX Core
AndroidX Core fornisce supporto per la funzionalità Caratteri scaricabili sui dispositivi con API Android 14 o versioni successive. Il pacchetto androidx.core.provider
contiene le classi FontsContractCompat
e FontRequest
per implementare il supporto della funzionalità 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 relativa all'utilizzo programmatico dei caratteri scaricabili.
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 framework FontsContract
e
android.graphics.fonts.FontRequest
.
Aggiungi dipendenza AndroidX Core
Per utilizzare le classi FontsContractCompat
e FontRequest
, devi modificare
le dipendenze classpath del progetto dell'app all'interno dell'ambiente di sviluppo.
Per aggiungere AndroidX Core al progetto dell'applicazione, aggiungi la seguente dipendenza al file build.gradle
dell'app:
Alla moda
dependencies { ... implementation "androidx.core:core-ktx:2.2.0" }
Kotlin
dependencies { ... implementation("androidx.core:core-ktx:2.2.0") }
Utilizza 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 al fine di velocizzare l'usabilità per più spessori e stili, ad esempio grassetto, medio o chiaro, se disponibili.
- Crea un nuovo file XML nella cartella
res/font
. - Aggiungi un elemento principale
<font-family>
e imposta gli attributi relativi al carattere, come mostrato nel seguente file XML di esempio: - Fai riferimento al file
@font/font_file_name
nel file XML di 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>
Pre-dichiarare i caratteri nel manifest
L'aumento artificiale 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 di utilizzo del primo layout. Per evitare questo ritardo, puoi predichiarare i caratteri che devono essere recuperati nel file manifest. Una volta che il sistema ha recuperato il carattere dal provider, questo è immediatamente disponibile. Se il recupero del carattere richiede più tempo del previsto, il sistema interrompe la procedura di recupero e utilizza il carattere predefinito.
Per pre-dichiarare i caratteri nel manifest, completa i seguenti passaggi:
- Crea un array di risorse in
res/values/arrays.xml
e dichiara i caratteri che vuoi precaricare. - Utilizza un tag
meta-data
per dichiarare l'array di risorse nel file 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 fornitore di caratteri non è preinstallato o se utilizzi la libreria AndroidX Core, dichiara i certificati con cui il fornitore di caratteri è firmato. Il sistema utilizza i certificati per verificare l'identità del provider di caratteri.
Per aggiungere certificati, segui questi passaggi:
- Crea un array di stringhe con i dettagli del certificato. Per ulteriori informazioni sui dettagli dei certificati, consulta la documentazione del fornitore di caratteri.
- 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"
Caratteri scaricabili in Compose
A partire da Compose 1.2-alpha07 puoi utilizzare l'API Downloadable Fonts nell'app Compose per scaricare Google Fonts in modo asincrono e utilizzarli nella tua app. Per ulteriori informazioni, consulta la documentazione Compose Downloadable Fonts.