Herunterladbare Schriftarten verwenden

Funktion „Schreiben“ ausprobieren
Jetpack Compose ist das empfohlene UI-Toolkit für Android. Hier erfahren Sie, wie Sie Text in Compose verwenden.

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.
In der Beispiel-App DownloadableFonts können Sie praktische Erfahrungen mit herunterladbaren Schriftarten sammeln.

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.

Bilder, die die Hauptkomponenten des Emoji-Kompatibilitätsprozesses zeigen
Abbildung 1: Herunterladbare Schriftarten

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.

  1. Wählen Sie im Layout-Editor ein TextView aus. Wählen Sie dann unter Attribute die Option fontFamily > Weitere Schriftarten aus.
    Bild, das den Layout-Editor von Android Studio zeigt
    Abbildung 2. Über den Layout-Editor:
    Das Fenster Ressourcen wird angezeigt.
  2. Wählen Sie im Menü Quelle die Option Google Fonts aus.
  3. Wählen Sie im Feld Schriftarten im Bereich „Zum Herunterladen“ eine Schriftart aus.
  4. Wählen Sie Herunterladbare Schriftart erstellen aus und klicken Sie auf OK.
    Ein Bild, auf dem zu sehen ist, wie Schriftarten im Fenster „Ressourcen“ ausgewählt werden
    Abbildung 3: Wählen Sie im Fenster Ressourcen eine Schriftart aus.
  5. Android Studio generiert automatisch die relevanten XML-Dateien, die erforderlich sind, um die Schriftart in Ihrer App korrekt zu rendern.

    Ein Bild, auf dem eine Vorschau der Schriftarten zu sehen ist
    Abbildung 4: Vorschau der Schriftartdatei:

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:

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:

  1. 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);
    
  2. Erstellen Sie eine Instanz der FontsContract.FontRequestCallback-Klasse.
  3. Ü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ür TextView festlegen.
  4. Überschreiben Sie die Methode onTypefaceRequestFailed(), um Informationen zu Fehlern beim Anfragen für Schriftarten zu erhalten. Weitere Informationen zu Fehlercodes finden Sie unter Fehlercodekonstanten.
  5. 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

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.

  1. Erstellen Sie eine neue XML-Datei im Ordner res/font.
  2. Fügen Sie ein <font-family>-Stammelement hinzu und legen Sie die Schriftartattribute fest, wie in der folgenden Beispiel-XML-Datei gezeigt:
  3. <?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>
    
  4. Verweisen Sie in der Layout-XML-Datei auf die Datei als @font/font_file_name. Sie können die Datei auch mit der Methode getFont() programmatisch abrufen, z. B. getFont(R.font.font_file_name).

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:

  1. Erstellen Sie ein Ressourcenarray in res/values/arrays.xml und deklarieren Sie die Schriftarten, die vorab abgerufen werden sollen.
  2. 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>
    
  3. Verwenden Sie ein meta-data-Tag, um das Ressourcenarray in Ihrem Manifest zu deklarieren.
  4. <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:

  1. Erstellen Sie ein String-Array mit den Zertifikatsdetails. Weitere Informationen zu Zertifikatsdetails finden Sie in der Dokumentation Ihres Schriftartanbieters.
  2. <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string-array name="certs">
           <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item>
        </string-array>
    </resources>
    
  3. Legen Sie das Attribut fontProviderCerts auf das Array fest.
  4. 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.