Mit der Funktion zum Herunterladen von Schriftarten können APIs Schriftarten von einer Anbieteranwendung anfordern, anstatt Dateien in der Anwendung zu bündeln oder Schriftarten herunterzuladen. Herunterladbare Schriftarten sind auf Geräten mit Android API-Version 14 und höher über die AndroidX Core-Bibliothek verfügbar.
Herunterladbare Schriftarten bieten die folgenden Vorteile:
- Dadurch wird die App-Größe reduziert und die Erfolgsrate der App-Installation erhöht.
- Die Funktion verbessert den allgemeinen Systemzustand, da mehrere Apps über einen Anbieter dieselbe Schriftart verwenden können. Das spart dem Nutzer mobile Daten, Smartphone-Arbeitsspeicher und Speicherplatz. Bei diesem Modell wird die Schrift bei Bedarf über das Netzwerk abgerufen.
Wie funktionieren herunterladbare Schriftarten?
Ein Schriftartanbieter 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 Prozess.
Grundlagen
Sie können die Funktion „Herunterladbare Schriftarten“ auf folgende Arten verwenden, die in den folgenden Abschnitten ausführlich beschrieben werden:
Herunterladbare Schriftarten mit Android Studio und Google Play-Diensten verwenden
Mit Android Studio 3.0 oder höher können Sie festlegen, dass Ihre Anwendung Schriftarten herunterlädt. Um die Funktionen für herunterladbare Schriftarten zu nutzen, können Sie den Schriftartenanbieter aus den Google Play-Diensten verwenden.
- Wählen Sie im Layouteditor einen
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 „Herunterladbar“ eine Schriftart aus.
- Wählen Sie Schriftart zum Herunterladen erstellen aus und klicken Sie auf OK.
Android Studio generiert automatisch die relevanten XML-Dateien, die zum korrekten Rendern der Schriftart in Ihrer App erforderlich sind.
Herunterladbare Schriftarten programmatisch verwenden
Ab Android 8.0 (API-Level 26) unterstützt AndroidX Core herunterladbare Schriftarten vollständig. Weitere Informationen zur Verwendung der AndroidX Core-Bibliothek finden Sie auf dieser Seite im Abschnitt Herunterladbare Fonts – AndroidX Core-Bibliothek.
Wenn Sie die Funktion „Herunterladbare Schriftarten“ programmatisch verwenden möchten, müssen Sie mit zwei wichtigen Klassen interagieren:
android.graphics.fonts.FontRequest
: Mit dieser Klasse können Sie eine Schriftanfrage erstellen.FontsContractCompat
: Mit dieser Klasse können Sie basierend auf der Schriftartanfrage ein neuesTypeface
-Objekt erstellen.
Deine App ruft Schriftarten über die FontsContract
API vom Schriftanbieter ab. Jeder Anbieter hat seine eigenen Einschränkungen für die unterstützten Android-Versionen und die Abfragesprache. Weitere Informationen zu den Android-Versionen und zum 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. Wenn Sie eine Anfrage erstellen möchten, übergeben Sie die folgenden Parameter:- Die Schriftart-Anbieterbehörde.
- Das Paket des Schriftartenanbieters zur Bestätigung der Identität des Anbieters.
- Die Zeichenfolgenabfrage der Schriftart. Weitere Informationen zu Abfrageformaten finden Sie in der Dokumentation Ihres Schriftartanbieters, z. B. unter Google Fonts.
- Eine Liste von Hash-Sätzen für die Zertifikate, mit denen die Identität des Anbieters überprüft werden kann.
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 Klasse
FontsContract.FontRequestCallback
. - Ü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 Schrift nach Bedarf festlegen. Du kannst die Schriftart beispielsweise in einemTextView
festlegen. - Überschreiben Sie die Methode
onTypefaceRequestFailed()
, um Informationen zu Fehlern beim Anfordern von Schriftarten zu erhalten. Weitere Informationen zu Fehlercodes finden Sie in den Konstanten für Fehlercodes. - Rufen Sie die Methode
FontsContract.requestFont()
auf, um die Schriftart vom Schriftartenanbieter 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 asynchron abgerufen und das Ergebnis an den Callback übergeben. Übergeben Sie die folgenden Parameter:- Eine Instanz der Klasse
Context
- Eine Instanz der Klasse
android.graphics.fonts.FontRequest
- Ein Callback zum Empfang der Ergebnisse der Schriftartanforderung
- Ein Handler zum Abrufen von Schriftarten in einem Thread
- Eine Instanz der Klasse
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 Schriftartanbieter 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 Android API-Version 14 oder höher. Das Paket androidx.core.provider
enthält die Klassen FontsContractCompat
und FontRequest
, um die abwärtskompatible Funktion zum Herunterladen von Schriftarten zu implementieren. Die AndroidX-Klassen enthalten Methoden, die den Framework-Methoden ähneln. Das Herunterladen von Schriftarten ähnelt dem Verfahren, das im Abschnitt auf dieser Seite zur programmmäßigen Verwendung herunterladbarer Schriftarten beschrieben wird.
Wenn Sie Schriftarten mit AndroidX herunterladen möchten, importieren Sie die Klassen FontsContractCompat
und FontRequest
aus dem Paket androidx.core.provider
. Erstellen Sie Instanzen dieser Klassen anstelle von FontsContract
- und android.graphics.fonts.FontRequest
-Framework-Klassen.
AndroidX Core-Abhängigkeit hinzufügen
Damit Sie die Klassen FontsContractCompat
und FontRequest
verwenden können, müssen Sie die Klassenpfadabhängigkeiten Ihres Anwendungsprojekts innerhalb Ihrer Entwicklungsumgebung ändern.
Wenn Sie Ihrem App-Projekt AndroidX Core hinzufügen möchten, fügen Sie der Datei build.gradle
Ihrer App die folgende Abhängigkeit hinzu:
Cool
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
Android 8.0 (API-Ebene 26) und AndroidX Core bieten eine schnellere und praktischere Möglichkeit, eine benutzerdefinierte Schriftart als Ressource im XML-Layout zu deklarieren. Dies bedeutet, dass die Schriftart nicht als Asset gebündelt werden muss. Sie können eine benutzerdefinierte Schriftart für Ihr gesamtes Design definieren, was die Nutzerfreundlichkeit für mehrere Schriftschnitte und Stile wie fett, mittel oder dünn beschleunigt, sofern diese zur Verfügung gestellt werden.
- Erstellen Sie im Ordner
res/font
eine neue XML-Datei. - Fügen Sie ein
<font-family>
-Stammelement hinzu und legen Sie die schriftbezogenen Attribute fest, wie in der folgenden Beispiel-XML-Datei gezeigt: - Gib in der Layout-XML-Datei
@font/font_file_name
als Dateinamen an. Sie können die Datei auch programmatisch mit der MethodegetFont()
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 deklarieren
Layout-Aufblähen und Ressourcenabruf sind synchrone Aufgaben. Beim ersten Versuch, Schriftarten abzurufen, wird standardmäßig eine Anfrage an den Schriftartenanbieter ausgelöst, wodurch die erste Layoutzeit verlängert wird. Um diese Verzögerung zu vermeiden, können Sie Schriftarten, die abgerufen werden müssen, vorab in Ihrem 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 Standardschriftart.
So deklarieren Sie Schriftarten vorab im Manifest:
- Erstellen Sie in
res/values/arrays.xml
ein Ressourcenarray und deklarieren Sie die Schriftarten, die Sie vorab laden möchten. - Verwende ein
meta-data
-Tag, um das Ressourcen-Array in deinem 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
Deklarieren Sie die Zertifikate, mit denen der Schriftartanbieter signiert ist, wenn kein Schriftartanbieter vorinstalliert ist oder Sie die AndroidX Core-Bibliothek verwenden. 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 Zertifikatdetails finden Sie in der Dokumentation Ihres Schriftartanbieters.
- Legen Sie das
fontProviderCerts
-Attribut 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"