Herunterladbare Schriftarten verwenden

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

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:

  • Dadurch wird die App-Größe reduziert und die Erfolgsrate der App-Installation erhöht.
  • Die allgemeine Systemintegrität wird verbessert, da mehrere Apps dieselbe Schriftart über einen Anbieter nutzen können. Das spart dem Nutzer mobile Daten, Smartphone-Arbeitsspeicher und Speicherplatz. Bei diesem Modell wird die Schrift bei Bedarf über das Netzwerk abgerufen.
Eine praktische Anleitung zu herunterladbaren Schriftarten finden Sie in der Beispiel-App DownloadableFonts.

Wie funktionieren herunterladbare Schriftarten?

Ein Schriftartenanbieter ist eine Anwendung, die Schriftarten abruft und lokal im Cache speichert, damit andere Apps Schriftarten anfordern und freigeben können. Die folgende Abbildung veranschaulicht den Prozess.

Ein Bild, auf dem die Hauptkomponenten des Emoji-kompatiblen Prozesses zu sehen sind
Abbildung 1. Herunterladbare Schriftarten

Grundlagen

Sie können die Funktion zum Herunterladen von Schriftarten auf folgende Arten verwenden, die in späteren Abschnitten ausführlich erläutert 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.

  1. Wählen Sie im Layout-Editor eine TextView aus. Wählen Sie dann unter Attribute die Option fontFamily > Weitere Schriftarten aus.
    Ein Bild, auf dem der Layout-Editor von Android Studio zu sehen ist
    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 im Bereich „Herunterladbar“ 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 zum korrekten Rendern der Schriftart in Ihrer App erforderlich sind.

    Bild, das zeigt, wie eine Schriftart in der Vorschau angezeigt wird
    Abbildung 4. Vorschau der Schriftdatei anzeigen

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 Herunterladbare Fonts – AndroidX Core-Bibliothek.

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

Ihre App ruft Schriftarten mithilfe der FontsContract API vom Schriftartenanbieter 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 einen Schriftschnitt herunter:

  1. Erstelle 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 Befugnis des Schriftartanbieters.
    • Das Paket des Schriftartenanbieters zur Bestätigung der Identität des Anbieters.
    • Die Stringabfrage der Schriftart. Weitere Informationen zu Abfrageformaten finden Sie in der Dokumentation Ihres Schriftanbieters, z. B. Google Fonts.
    • Eine Liste von Hash-Sätzen für die Zertifikate zur Überprüfung der Identität des Anbieters.

    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 Schrift nach Bedarf festlegen. Sie können beispielsweise die Schriftart für eine TextView festlegen.
  4. Überschreiben Sie die Methode onTypefaceRequestFailed(), um Informationen zu Fehlern bei der Schriftanfrage zu erhalten. Weitere Informationen zu Fehlercodes finden Sie in den Konstanten für Fehlercodes.
  5. 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 nicht lokal verfügbar ist, wird der Schriftartenanbieter aufgerufen, die Schriftart asynchron abgerufen und das Ergebnis an den Rückruf übergeben. Übergeben Sie die folgenden Parameter:
    • Eine Instanz der Klasse Context
    • Eine Instanz der Klasse android.graphics.fonts.FontRequest
    • Ein Rückruf, um die Ergebnisse der Schriftanfrage zu erhalten
    • 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 „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 im Abschnitt auf dieser Seite zur programmmäßigen Verwendung herunterladbarer Schriftarten 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.

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:2.2.0"
}

Kotlin

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

Herunterladbare Schriftarten als Ressourcen in XML verwenden

Android 8.0 (API-Level 26) und AndroidX Core bieten eine schnellere und bequemere Möglichkeit, eine benutzerdefinierte Schriftart im XML-Layout als Ressource zu 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, was die Nutzerfreundlichkeit für unterschiedliche Schriftstärken und -stile wie Fett, Mittel oder Hell (sofern angegeben) beschleunigt.

  1. Erstellen Sie im Ordner res/font eine neue XML-Datei.
  2. Fügen Sie ein <font-family>-Stammelement hinzu und legen Sie die schriftbezogenen Attribute 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. Gib in der Layout-XML-Datei @font/font_file_name als Dateinamen an. Sie können die Datei auch programmatisch mit der Methode getFont() abrufen, z. B. getFont(R.font.font_file_name).

Schriftarten im Manifest vorab deklarieren

Layout-Aufblähen und Ressourcenabruf sind synchrone Aufgaben. Standardmäßig löst der erste Versuch, Schriftarten abzurufen, eine Anfrage an den Schriftartenanbieter aus, was die erste Layoutzeit erhöht. Um diese Verzögerung zu vermeiden, können Sie Schriftarten, die abgerufen werden müssen, in Ihrem Manifest vorab angeben. Nachdem das System die Schriftart vom Anbieter abgerufen hat, ist sie sofort verfügbar. Wenn das Abrufen des Schriftzugs länger als erwartet dauert, bricht das System den Abrufvorgang ab und verwendet den Standardschriftzug.

Führe die folgenden Schritte aus, um Schriftarten im Manifest zu deklarieren:

  1. Erstellen Sie in res/values/arrays.xml ein Ressourcenarray und deklarieren Sie die Schriftarten, die Sie vorab laden 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 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 überprüft mithilfe der Zertifikate die Identität des Schriftanbieters.

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

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