Mit der Funktion „Herunterladbare Schriftarten“ können APIs Schriftarten von einer Anbieteranwendung anfordern, anstatt Dateien in der App zu bündeln oder die App Schriftarten herunterladen zu lassen. Herunterladbare Schriftarten sind auf Geräten mit Android API-Version 14 und höher über die AndroidX Core-Bibliothek verfügbar.
Herunterladbare Schriftarten bieten folgende Vorteile:
- Reduziert die App-Größe und erhöht somit die Erfolgsquote der App-Installation.
- Verbessert den Gesamtzustand des Systems, da mehrere Anwendungen dieselbe Schriftart über einen Anbieter verwenden können. Dadurch spart der Nutzer mobile Daten, Telefonspeicher und Speicherplatz. In diesem Modell wird die Schriftart bei Bedarf über das Netzwerk abgerufen.
Wie funktionieren herunterladbare Schriftarten?
Ein Schriftartenanbieter ist eine Anwendung, die Schriftarten abruft und lokal im Cache speichert, damit andere Anwendungen Schriftarten anfordern und freigeben können. Die folgende Abbildung veranschaulicht den Vorgang.
Grundlagen
Sie können die Funktion „Herunterladbare Schriftarten“ auf die folgenden Arten verwenden, die in späteren Abschnitten ausführlich erläutert werden:
Herunterladbare Schriftarten mit Android Studio und Google Play-Diensten verwenden
Sie können Ihre Anwendung so einstellen, dass Schriftarten heruntergeladen werden, wenn Sie Android Studio 3.0 oder höher verwenden. Für den Einstieg in die Funktionen für herunterladbare Schriftarten können Sie den Schriftartenanbieter aus den Google Play-Diensten verwenden.
- Wählen Sie im Layout-Editor ein
TextView
aus. Wählen Sie dann unter Attribute die Option fontFamily > Weitere Schriftarten aus. Das Fenster Ressourcen wird angezeigt. - Wählen Sie im Menü Quelle die Option Google Fonts aus.
- Wählen Sie im Feld Schriftarten im Bereich „Zum Herunterladen“ eine Schriftart aus.
- Wählen Sie Herunterladbare Schriftart erstellen aus und klicken Sie auf OK.
Android Studio generiert automatisch die relevanten XML-Dateien, die erforderlich sind, um die Schriftart in Ihrer App korrekt zu rendern.
Herunterladbare Schriftarten programmatisch verwenden
Ab Android 8.0 (API-Level 26) bietet AndroidX Core vollständige Unterstützung für herunterladbare Schriftarten. Weitere Informationen zur Verwendung der AndroidX Core-Bibliothek finden Sie auf dieser Seite im Abschnitt Downloadable Fonts AndroidX Core Library.
Um die Funktion "Herunterladbare Schriftarten" programmatisch zu verwenden, müssen Sie mit zwei Schlüsselklassen interagieren:
android.graphics.fonts.FontRequest
: Mit dieser Klasse können Sie eine Schriftartanfrage erstellen.FontsContractCompat
: Mit dieser Klasse können Sie basierend auf der Schriftartanfrage ein neuesTypeface
-Objekt erstellen.
Ihre App ruft Schriftarten mithilfe der FontsContract
API vom Schriftartanbieter ab. Jeder Anbieter hat seine eigenen Einschränkungen für die Android-Versionen und die unterstützte Abfragesprache. Weitere Informationen zu den Android-Versionen und dem Abfrageformat finden Sie in der Dokumentation Ihres Anbieters.
So laden Sie eine Schriftart herunter:
- Erstellen Sie eine Instanz der Klasse
android.graphics.fonts.FontRequest
, um die Schriftart vom Anbieter anzufordern. Übergeben Sie die folgenden Parameter, um eine Anfrage zu erstellen:- Die Autorität des Schriftartenanbieters.
- Das Paket des Schriftartanbieters zur Überprüfung der Identität des Anbieters.
- Die Stringabfrage der Schriftart. Weitere Informationen zu Abfrageformaten finden Sie in der Dokumentation Ihres Schriftartanbieters wie Google Fonts.
- Eine Liste mit Hashes für die Zertifikate, um die Identität des Anbieters zu bestätigen.
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);
- Erstellen Sie eine Instanz der
FontsContract.FontRequestCallback
-Klasse. - Überschreiben Sie die Methode
onTypefaceRetrieved()
, um anzugeben, dass die Schriftartanfrage abgeschlossen ist. Geben Sie die abgerufene Schriftart als Parameter an. Mit dieser Methode können Sie die Schriftart nach Bedarf festlegen. Du kannst die Schriftart beispielsweise fürTextView
festlegen. - Überschreiben Sie die Methode
onTypefaceRequestFailed()
, um Informationen zu Fehlern beim Anfragen für Schriftarten zu erhalten. Weitere Informationen zu Fehlercodes finden Sie unter Fehlercodekonstanten. - Rufen Sie die Methode
FontsContract.requestFont()
auf, um die Schriftart vom Schriftartanbieter abzurufen. Die Methode initiiert eine Prüfung, um festzustellen, ob die Schriftart im Cache vorhanden ist. Wenn die Schriftart lokal nicht verfügbar ist, wird der Schriftartanbieter aufgerufen, die Schriftart wird asynchron abgerufen und das Ergebnis wird an den Callback übergeben. Übergeben Sie folgende Parameter:- Eine Instanz der
Context
-Klasse - Eine Instanz der
android.graphics.fonts.FontRequest
-Klasse - Ein Callback zum Empfangen der Ergebnisse der Schriftartanfrage
- Ein Handler zum Abrufen von Schriftarten in einem Thread
- Eine Instanz der
Der folgende Beispielcode veranschaulicht den gesamten Prozess für herunterladbare Schriftarten:
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);
Weitere Informationen zum Herunterladen einer Schriftart von einem Schriftartenanbieter finden Sie in der Beispiel-App DownloadableFonts.
Herunterladbare Schriftarten mit AndroidX Core verwenden
AndroidX Core unterstützt die Funktion zum Herunterladen von Schriftarten auf Geräten mit der Android API-Version 14 oder höher. Das Paket androidx.core.provider
enthält die Klassen FontsContractCompat
und FontRequest
zur Implementierung der abwärtskompatiblen Unterstützung der Funktion für herunterladbare Schriftarten. Die AndroidX-Klassen enthalten ähnliche Methoden wie die Framework-Methoden. Der Vorgang zum Herunterladen von Schriftarten ähnelt dem, der im Abschnitt Herunterladbare Schriftarten programmatisch verwenden auf dieser Seite beschrieben wird.
Wenn du Schriftarten mit AndroidX herunterladen möchtest, importiere die Klassen FontsContractCompat
und FontRequest
aus dem Paket androidx.core.provider
. Erstellen Sie Instanzen dieser Klassen anstelle der Framework-Klassen FontsContract
und android.graphics.fonts.FontRequest
.
AndroidX Core-Abhängigkeit hinzufügen
Wenn Sie die Klassen FontsContractCompat
und FontRequest
verwenden möchten, müssen Sie die Klassenpfadabhängigkeiten Ihres App-Projekts in Ihrer Entwicklungsumgebung ändern.
Fügen Sie der Datei build.gradle
Ihrer App die folgende Abhängigkeit hinzu, um AndroidX Core Ihrem App-Projekt hinzuzufügen:
Groovig
dependencies { ... implementation "androidx.core:core-ktx:2.2.0" }
Kotlin
dependencies { ... implementation("androidx.core:core-ktx:2.2.0") }
Herunterladbare Schriftarten als XML-Ressourcen verwenden
Mit Android 8.0 (API-Level 26) und AndroidX Core lässt sich eine benutzerdefinierte Schriftart schneller und bequemer als Ressource im XML-Layout deklarieren. Die Schriftart muss also nicht als Asset gebündelt werden. Sie können eine benutzerdefinierte Schriftart für Ihr gesamtes Design definieren, um die Nutzerfreundlichkeit für verschiedene Schriftstärken und Stile zu beschleunigen, z. B. Fett, Mittel oder Leicht.
- Erstellen Sie eine neue XML-Datei im Ordner
res/font
. - Fügen Sie ein
<font-family>
-Stammelement hinzu und legen Sie die Schriftartattribute fest, wie in der folgenden Beispiel-XML-Datei gezeigt: - Verweisen Sie in der Layout-XML-Datei auf die Datei als
@font/font_file_name
. Sie können die Datei auch mit der MethodegetFont()
programmatisch abrufen, z. B.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>
Schriftarten im Manifest vorab deklarieren
Die Layoutinflation und das Abrufen von Ressourcen sind synchrone Aufgaben. Standardmäßig löst der erste Versuch, Schriftarten abzurufen, eine Anfrage an den Schriftartenanbieter aus. Dadurch verlängert sich die Zeit für das erste Layout. Um die Verzögerung zu vermeiden, kannst du Schriftarten, die abgerufen werden müssen, vorab in deinem Manifest deklarieren. Nachdem das System die Schriftart vom Anbieter abgerufen hat, ist sie sofort verfügbar. Wenn das Abrufen von Schriftarten länger als erwartet dauert, bricht das System den Abrufvorgang ab und verwendet die Standardschrift.
Führen Sie die folgenden Schritte aus, um Schriftarten im Manifest vorab zu deklarieren:
- Erstellen Sie ein Ressourcenarray in
res/values/arrays.xml
und deklarieren Sie die Schriftarten, die vorab abgerufen werden sollen. - Verwenden Sie ein
meta-data
-Tag, um das Ressourcenarray in Ihrem Manifest zu deklarieren.
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" />
Zertifikate hinzufügen
Wenn ein Schriftanbieter nicht vorinstalliert ist oder Sie die AndroidX Core-Bibliothek verwenden, deklarieren Sie die Zertifikate, mit denen der Schriftanbieter signiert ist. Das System verwendet die Zertifikate, um die Identität des Schriftanbieters zu überprüfen.
So fügen Sie Zertifikate hinzu:
- Erstellen Sie ein String-Array mit den Zertifikatsdetails. Weitere Informationen zu Zertifikatsdetails finden Sie in der Dokumentation Ihres Schriftartanbieters.
- Legen Sie das Attribut
fontProviderCerts
auf das Array fest.
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="certs"> <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item> </string-array> </resources>
android:fontProviderCerts="@array/certs"
Herunterladbare Schriftarten in Compose
Ab Compose 1.2-alpha07 können Sie die Downloadable Fonts API in Ihrer Compose-Anwendung verwenden, um Google Fonts asynchron herunterzuladen und in Ihrer Anwendung zu verwenden. Weitere Informationen finden Sie in der Dokumentation zu Herunterladbaren Schriftarten erstellen.