Używaj czcionek do pobrania

Wypróbuj Compose
Jetpack Compose to zalecany zestaw narzędzi do tworzenia interfejsu na Androida. Dowiedz się, jak używać tekstu w Compose.

Funkcja czcionek do pobrania umożliwia interfejsom API żądanie czcionek od aplikacji dostawcy zamiast dołączania plików do aplikacji lub umożliwiania aplikacji pobierania czcionek. Czcionki do pobrania są dostępne na urządzeniach z interfejsem API Androida w wersji 14 lub nowszej za pomocą biblioteki AndroidX Core.

Czcionki do pobrania mają te zalety:

  • Zmniejsza rozmiar aplikacji, co zwiększa wskaźnik sukcesu instalacji.
  • Poprawia ogólny stan systemu, ponieważ wiele aplikacji może udostępniać tę samą czcionkę za pomocą dostawcy. Dzięki temu użytkownicy mogą zaoszczędzić komórkową transmisję danych, pamięć telefonu i miejsce na dysku. W tym modelu czcionka jest pobierana przez sieć, gdy jest potrzebna.
Aby dowiedzieć się więcej o czcionkach do pobrania, zapoznaj się z przykładową aplikacją DownloadableFonts.

Jak działają czcionki do pobrania?

Dostawca czcionek to aplikacja, która pobiera czcionki i zapisuje je lokalnie w pamięci podręcznej, aby inne aplikacje mogły je żądać i udostępniać. Proces ten przedstawia poniższy rysunek.

Obraz przedstawiający główne komponenty procesu EmojiCompat
Rysunek 1. Proces czcionek do pobrania.

Podstawy

Z funkcji czcionek do pobrania możesz korzystać na różne sposoby, które szczegółowo omawiamy w kolejnych sekcjach:

Używanie czcionek do pobrania w Android Studio i Usługach Google Play

Możesz skonfigurować aplikację tak, aby pobierała czcionki, używając Android Studio 3.0 lub nowszego. Aby ułatwić Ci rozpoczęcie korzystania z funkcji czcionek do pobrania, możesz użyć dostawcy czcionek z Usług Google Play.

  1. W edytorze układu wybierz TextView. Następnie w sekcji Atrybuty wybierz fontFamily > Więcej czcionek.
    Obraz przedstawiający edytor układu w Android Studio
    Rysunek 2. Korzystanie z edytora układu.
    Pojawi się okno Zasoby.
  2. W menu Źródło wybierz Google Fonts.
  3. W polu Czcionki wybierz czcionkę w obszarze „Do pobrania”.
  4. Wybierz Utwórz czcionkę do pobrania i kliknij OK.
    Obraz pokazujący, jak wybrać czcionki w oknie Zasoby
    Rysunek 3. wybór czcionki w oknie Zasoby,
  5. Android Studio automatycznie generuje odpowiednie pliki XML, które są potrzebne do prawidłowego renderowania czcionki w aplikacji.

    Obraz pokazujący, jak wyświetlić podgląd czcionek
    Rysunek 4. Wyświetlanie podglądu pliku czcionki.

Automatyczne używanie czcionek do pobrania

Od Androida 8.0 (poziom interfejsu API 26) AndroidX Core zapewnia pełną obsługę czcionek do pobrania. Więcej informacji o korzystaniu z biblioteki AndroidX Core znajdziesz w sekcji Biblioteka AndroidX Core z czcionkami do pobrania na tej stronie.

Aby korzystać z funkcji czcionek do pobrania w sposób zautomatyzowany, użyj 2 kluczowych klas:

Aplikacja pobiera czcionki od dostawcy czcionek za pomocą interfejsu API FontsContract. Każdy dostawca ma własny zestaw ograniczeń dotyczących obsługiwanych wersji Androida i języka zapytań. Więcej informacji o wersjach Androida i formacie zapytania znajdziesz w dokumentacji dostawcy.

Aby pobrać czcionkę, wykonaj te czynności:

  1. Utwórz instancję klasy android.graphics.fonts.FontRequest, aby poprosić dostawcę o czcionkę. Aby utworzyć żądanie, przekaż te parametry:
    • Urząd dostawcy czcionek.
    • Pakiet dostawcy czcionek do weryfikacji tożsamości dostawcy.
    • Ciąg zapytania dotyczący czcionki. Więcej informacji o formatach zapytań znajdziesz w dokumentacji dostawcy czcionek, np. Google Fonts.
    • Lista zestawów skrótów certyfikatów służących do weryfikacji tożsamości dostawcy.

    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. Utwórz instancję klasy FontsContract.FontRequestCallback.
  3. Zastąp metodę onTypefaceRetrieved(), aby wskazać, że żądanie czcionki zostało zrealizowane. Podaj pobraną czcionkę jako parametr. Możesz użyć tej metody, aby ustawić czcionkę zgodnie z potrzebami. Możesz na przykład ustawić czcionkę w elemencie TextView.
  4. Zastąp metodę onTypefaceRequestFailed(), aby otrzymywać informacje o błędach w procesie żądania czcionki. Więcej informacji o kodach błędów znajdziesz w sekcji stałe kodów błędów.
  5. Wywołaj metodę FontsContract.requestFont(), aby pobrać czcionkę od dostawcy czcionek. Metoda inicjuje sprawdzenie, czy czcionka znajduje się w pamięci podręcznej. Jeśli czcionka nie jest dostępna lokalnie, wywołuje dostawcę czcionek, pobiera czcionkę asynchronicznie i przekazuje wynik do wywołania zwrotnego. Przekaż te parametry:
    • Instancja klasy Context
    • Instancja klasy android.graphics.fonts.FontRequest
    • Wywołanie zwrotne, które ma otrzymać wyniki żądania czcionki
    • Moduł obsługi do pobierania czcionek w wątku

Poniższy przykładowy kod ilustruje cały proces korzystania z czcionek do pobrania:

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);

Więcej informacji o pobieraniu czcionki od dostawcy czcionek znajdziesz w przykładowej aplikacji DownloadableFonts.

Używanie czcionek do pobrania z AndroidX Core

AndroidX Core obsługuje funkcję czcionek do pobrania na urządzeniach z interfejsem API Androida w wersji 14 lub nowszej. Pakiet androidx.core.provider zawiera klasy FontsContractCompat i FontRequest, które umożliwiają obsługę zgodnej wstecznie funkcji czcionek do pobrania. Klasy AndroidX zawierają metody podobne do metod platformy, a proces pobierania czcionek jest podobny do opisanego w sekcji na tej stronie dotyczącej programowego używania czcionek do pobrania.

Aby pobrać czcionki za pomocą AndroidX, zaimportuj klasy FontsContractCompat i FontRequest z pakietu androidx.core.provider. Zamiast klas platformy FontsContract i android.graphics.fonts.FontRequest utwórz instancje tych klas.

Dodawanie zależności AndroidX Core

Aby używać klas FontsContractCompat i FontRequest, musisz zmodyfikować zależności ścieżki klasy projektu aplikacji w środowisku programistycznym.

Aby dodać AndroidX Core do projektu aplikacji, dodaj do pliku build.gradle aplikacji tę zależność:

Dynamiczny

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

Kotlin

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

Używanie czcionek do pobrania jako zasobów w pliku XML

Android 8.0 (poziom interfejsu API 26) i AndroidX Core umożliwiają szybsze i wygodniejsze deklarowanie niestandardowej czcionki jako zasobu w układzie XML. Oznacza to, że nie trzeba dołączać czcionki jako zasobu. Możesz zdefiniować niestandardową czcionkę dla całego motywu, co przyspieszy korzystanie z wielu grubości i stylów, takich jak pogrubienie, średnia lub cienka, jeśli są dostępne.

  1. Utwórz nowy plik XML w folderze res/font.
  2. Dodaj element główny <font-family> i ustaw atrybuty związane z czcionką, jak pokazano w tym przykładowym pliku XML:
  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. W pliku XML układu odwołaj się do pliku jako @font/font_file_name. Możesz też użyć metody getFont(), aby pobrać plik automatycznie, np. getFont(R.font.font_file_name).

Wstępne deklarowanie czcionek w pliku manifestu

Rozwijanie układu i pobieranie zasobów to zadania synchroniczne. Domyślnie pierwsza próba pobrania czcionek powoduje wysłanie żądania do dostawcy czcionek, co wydłuża czas pierwszego układu. Aby uniknąć opóźnienia, możesz wstępnie zadeklarować czcionki, które muszą zostać pobrane w pliku manifestu. Gdy system pobierze czcionkę od dostawcy, będzie ona natychmiast dostępna. Jeśli pobieranie czcionki trwa dłużej niż zwykle, system przerywa proces pobierania i używa czcionki domyślnej.

Aby wstępnie zadeklarować czcionki w pliku manifestu, wykonaj te czynności:

  1. Utwórz tablicę zasobów w pliku res/values/arrays.xml i zadeklaruj czcionki, które chcesz pobrać z wyprzedzeniem.
  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. Użyj tagu meta-data, aby zadeklarować tablicę zasobów w pliku manifestu.
  4. <meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" />

Dodaj certyfikaty

Jeśli dostawca czcionek nie jest wstępnie zainstalowany lub używasz biblioteki AndroidX Core, zadeklaruj certyfikaty, którymi jest podpisany dostawca czcionek. System używa certyfikatów do weryfikacji tożsamości dostawcy czcionek.

Aby dodać certyfikaty, wykonaj te czynności:

  1. Utwórz tablicę tekstową ze szczegółami certyfikatu. Więcej informacji o certyfikatach znajdziesz w dokumentacji dostawcy czcionek.
  2. <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string-array name="certs">
           <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item>
        </string-array>
    </resources>
  3. Ustaw atrybut fontProviderCerts na tablicę.
  4. android:fontProviderCerts="@array/certs"