Herunterladbare Schriftarten verwenden

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

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:

  • Damit wird die App-Größe reduziert und die Erfolgsrate steigt.
  • 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. In diesem Modell wird die Schriftart bei Bedarf über das Netzwerk abgerufen.
Praktische Verwendung von herunterladbaren Schriftarten erhalten Sie in der Beispiel-App DownloadableFonts.

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.

Ein Bild, auf dem die Hauptkomponenten des Emoji-kompatiblen Prozesses zu sehen sind
Abbildung 1. Prozess zum Herunterladen von 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

Sie können Ihre App so einrichten, dass Schriftarten mithilfe von Android Studio 3.0 oder höher heruntergeladen werden. Als Einstieg in die Funktionen zum Herunterladen von Schriftarten können Sie den Schriftartanbieter aus den Google Play-Diensten verwenden.

  1. Wählen Sie im Layouteditor einen 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
    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 „Herunterladbare“ eine Schriftart aus.
  4. Wählen Sie Schriftart zum Herunterladen 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 für das korrekte Rendern der Schriftart in deiner App erforderlich sind.

    Ein Bild, auf dem zu sehen ist, wie eine Vorschau von Schriftarten angezeigt wird
    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 zur Downloadable Fonts AndroidX Core-Bibliothek.

Wenn Sie die Funktion zum Herunterladen von Schriftarten programmatisch nutzen möchten, interagieren Sie mit zwei Hauptklassen:

Deine App ruft Schriftarten über die FontsContract API vom Schriftanbieter 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 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. Übergeben Sie die folgenden Parameter, um eine Anfrage zu erstellen:
    • Die Befugnis des Schriftartanbieters.
    • Das Paket des Schriftartanbieters, um die Identität des Anbieters zu überprüfen
    • 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);
    
  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. Du kannst die Schriftart beispielsweise in einem TextView festlegen.
  4. Überschreiben Sie die Methode onTypefaceRequestFailed(), um Informationen zu Fehlern bei der Anforderung von 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 asynchron abgerufen und das Ergebnis an den Callback übergeben. Übergeben Sie die folgenden Parameter:
    • Eine Instanz der Klasse Context
    • Instanz der android.graphics.fonts.FontRequest-Klasse
    • Ein Callback zum Empfang der Ergebnisse der Schriftartanforderung
    • Ein Handler zum Abrufen von Schriftarten in einem Thread

Der folgende Beispielcode veranschaulicht den allgemeinen 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. Der Vorgang zum Herunterladen von Schriftarten ähnelt dem im Abschnitt auf dieser Seite zur programmatischen Verwendung von herunterladbaren Schriftarten beschrieben.

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

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

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

Schriftarten im Manifest deklarieren

Layout-Inflation 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 die 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.

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

  1. Erstellen Sie ein Ressourcen-Array in res/values/arrays.xml und deklarieren Sie die Schriftarten, für die Sie einen Prefetch durchführen 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. Verwende ein meta-data-Tag, um das Ressourcen-Array in deinem Manifest zu deklarieren.
  4. <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 überprüft mithilfe der Zertifikate die Identität des Schriftanbieters.

So fügen Sie Zertifikate hinzu:

  1. Erstellen Sie ein String-Array mit den Zertifikatsdetails. Weitere Informationen zu Zertifikatdetails 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 der Compose-App verwenden, um Google Fonts asynchron herunterzuladen und in Ihrer App zu verwenden. Weitere Informationen finden Sie in der Dokumentation zu Herunterladbaren Schriftarten erstellen.