Herunterladbare Schriftarten verwenden

Compose ausprobieren
Jetpack Compose ist das empfohlene UI-Toolkit für Android. Informationen zum Verwenden von Text in Compose

Mit der Funktion „Herunterladbare Schriftarten“ können APIs Schriftarten von einer Anbieteranwendung anfordern, anstatt Dateien in die App einzubinden 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:

  • Die App-Größe wird reduziert, wodurch sich die Installations-Erfolgsrate erhöht.
  • Die allgemeine Systemleistung wird verbessert, da mehrere Apps über einen Anbieter dieselbe Schriftart verwenden können. So sparen Nutzer mobile Daten, Arbeitsspeicher und Speicherplatz. In diesem Modell wird die Schriftart bei Bedarf über das Netzwerk abgerufen.
Wenn Sie herunterladbare Schriftarten ausprobieren möchten, sehen Sie sich die Beispiel-App DownloadableFonts an.

Wie funktionieren herunterladbare Schriftarten?

Ein Schriftartenanbieter ist eine Anwendung, die Schriftarten abruft und lokal im Cache speichert, damit andere Apps Schriftarten anfordern und teilen können. In der folgenden Abbildung wird dieser Vorgang veranschaulicht.

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

Grundlagen

Sie können die Funktion „Herunterladbare Schriftarten“ auf folgende Arten verwenden, die in späteren Abschnitten ausführlich beschrieben werden:

Herunterladbare Schriftarten mit Android Studio und Google Play-Diensten verwenden

Sie können Ihre Anwendung so einrichten, dass Schriftarten mit Android Studio 3.0 oder höher heruntergeladen werden. Um Ihnen den Einstieg in die Funktionen für herunterladbare Schriftarten zu erleichtern, 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.
    Ein Bild mit dem Layout-Editor von Android Studio
    Abbildung 2. Layout-Editor verwenden
    Das Fenster Ressourcen wird angezeigt.
  2. Wählen Sie im Menü Quelle die Option Google Fonts aus.
  3. Wählen Sie im Feld Schriftarten eine Schriftart unter „Herunterladbar“ aus.
  4. Wählen Sie Herunterladbare Schriftart erstellen aus und klicken Sie auf OK.
    Bild, das zeigt, wie Schriftarten im Fenster „Ressourcen“ ausgewählt werden
    Abbildung 3. Sie wählen eine Schriftart im Fenster Ressourcen aus.
  5. Android Studio generiert automatisch die relevanten XML-Dateien, die zum korrekten Rendern der Schriftart in Ihrer App erforderlich sind.

    Bild, das zeigt, wie Schriftarten in der Vorschau angezeigt werden
    Abbildung 4: Vorschau der Schriftartdatei

Herunterladbare Schriftarten programmatisch verwenden

Ab Android 8.0 (API-Ebene 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 AndroidX Core-Bibliothek für herunterladbare Schriftarten.

Wenn Sie das Feature „Herunterladbare Schriftarten“ programmatisch verwenden möchten, müssen Sie mit zwei wichtigen Klassen interagieren:

Ihre App ruft Schriftarten vom Schriftartenanbieter über die FontsContract API ab. Jeder Anbieter hat eigene Einschränkungen hinsichtlich der unterstützten Android-Versionen und Abfragesprachen. Weitere Informationen zu den Android-Versionen und zum 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. Um eine Anfrage zu erstellen, übergeben Sie die folgenden Parameter:
    • Die Autorität des Schriftartenanbieters.
    • Das Schriftanbieterpaket, mit dem die Identität des Anbieters bestätigt werden soll.
    • Die String-Abfrage der Schriftart. Weitere Informationen zu Anfrageformaten finden Sie in der Dokumentation Ihres Schriftanbieters, z. B. Google Fonts.
    • Eine Liste mit Hashsätzen für die Zertifikate, mit denen die Identität des Anbieters überprüft werden soll.

    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 Klasse FontsContract.FontRequestCallback.
  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. Sie können beispielsweise die Schriftart für ein TextView festlegen.
  4. Überschreiben Sie die Methode onTypefaceRequestFailed(), um Informationen zu Fehlern im Schriftartanfrageprozess 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 nicht lokal verfügbar ist, wird der Schriftartanbieter aufgerufen, die Schriftart wird asynchron abgerufen und das Ergebnis wird 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 Empfangen der Ergebnisse der Schriftart-Anfrage
    • 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 Schriftartanbieter finden Sie in der Beispiel-App DownloadableFonts.

Herunterladbare Schriftarten mit AndroidX Core verwenden

AndroidX Core bietet Unterstützung für die Funktion „Herunterladbare 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 Unterstützung für herunterladbare Schriftarten zu implementieren. Die AndroidX-Klassen enthalten Methoden, die den Framework-Methoden ähneln. Das Herunterladen von Schriftarten ähnelt dem Verfahren, das auf dieser Seite im Abschnitt Herunterladbare Schriftarten programmatisch verwenden 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

Wenn Sie die Klassen FontsContractCompat und FontRequest verwenden möchten, müssen Sie die Classpath-Abhängigkeiten Ihres App-Projekts in Ihrer Entwicklungsumgebung ändern.

Wenn Sie AndroidX Core Ihrem Anwendungsprojekt hinzufügen möchten, fügen Sie der Datei build.gradle Ihrer App die folgende Abhängigkeit hinzu:

Groovy

dependencies {
    ...
    implementation "androidx.core:core-ktx:1.16.0"
}

Kotlin

dependencies {
    ...
    implementation("androidx.core:core-ktx:1.16.0")
}

Herunterladbare Schriftarten als Ressourcen in XML verwenden

Unter Android 8.0 (API-Ebene 26) und AndroidX Core können Sie eine benutzerdefinierte Schriftart schneller und einfacher als Ressource im XML-Layout deklarieren. Das bedeutet, dass die Schriftart nicht als Asset gebündelt werden muss. Sie können eine benutzerdefinierte Schriftart für Ihr gesamtes Design definieren. Das verbessert die Nutzerfreundlichkeit, wenn mehrere Schriftstärken und ‑formatierungen wie fett, mittel oder hell verfügbar sind.

  1. Erstellen Sie im Ordner res/font eine neue XML-Datei.
  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 XML-Layoutdatei auf die Datei als @font/font_file_name. Sie können die Datei auch programmatisch abrufen, z. B. mit der Methode getFont(): getFont(R.font.font_file_name).

Schriftarten im Manifest vorab deklarieren

Das Aufblähen des Layouts und das Abrufen von Ressourcen sind synchrone Aufgaben. Standardmäßig wird beim ersten Versuch, Schriftarten abzurufen, eine Anfrage an den Schriftartenanbieter gesendet. Dadurch verlängert sich die Zeit für das erste Layout. Um die Verzögerung zu vermeiden, können Sie Schriftarten, die abgerufen werden müssen, im Manifest vorab deklarieren. Nachdem das System die Schriftart vom Anbieter abgerufen hat, ist sie sofort verfügbar. Wenn das Abrufen der Schriftart länger als erwartet dauert, bricht das System den Abrufvorgang ab und verwendet die Standardschriftart.

So deklarieren Sie Schriftarten im Manifest vorab:

  1. Erstellen Sie in res/values/arrays.xml ein Ressourcen-Array und deklarieren Sie die Schriftarten, die Sie vorab abrufen möchten.
  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 Ressourcen-Array in Ihrem Manifest zu deklarieren.
  4. <meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" />

Zertifikate hinzufügen

Wenn ein Schriftartenanbieter nicht vorinstalliert ist oder Sie die AndroidX Core-Bibliothek verwenden, deklarieren Sie die Zertifikate, mit denen der Schriftartenanbieter signiert ist. Das System verwendet die Zertifikate, um die Identität des Schriftartenanbieters zu bestätigen.

Führen Sie die folgenden Schritte aus, um Zertifikate hinzuzufügen:

  1. Erstellen Sie ein String-Array mit den Zertifikatsdetails. Weitere Informationen zu Zertifikatsdetails finden Sie in der Dokumentation Ihres Schriftartenanbieters.
  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