Używaj czcionek do pobrania

Wypróbuj tworzenie wiadomości
Jetpack Compose to zalecany zestaw narzędzi interfejsu na Androida. Dowiedz się, jak korzystać z tekstu w Compose.

Funkcja Pobierane czcionki umożliwia interfejsom API żądanie czcionek z aplikacji dostawcy zamiast dołączania plików do aplikacji lub zezwalania aplikacji na pobieranie czcionek. Możliwość pobierania czcionek jest dostępna na urządzeniach z Androidem w wersji interfejsu API 14 lub nowszej za pomocą biblioteki AndroidX Core.

Czcionki do pobrania zapewniają te korzyści:

  • Zmniejsza rozmiar aplikacji, zwiększając tym samym skuteczność jej instalacji.
  • Poprawia ogólną kondycję systemu, ponieważ wiele aplikacji może korzystać z tego samego czcionki przez dostawcę. Dzięki temu użytkownicy oszczędzają dane komórkowe, pamięć telefonu i miejsce na dysku. W tym modelu czcionka jest pobierana przez sieć w razie potrzeby.
Aby zapoznać się z czcionkami do pobrania, otwórz przykładową aplikację DownloadableFonts.

Jak działają czcionki do pobrania?

Dostawca czcionek to aplikacja, która pobiera czcionki i przechowuje je lokalnie, aby inne aplikacje mogły je żądać i udostępniać. Proces ten obrazuje poniższy rysunek.

Obraz pokazujący główne komponenty procesu zgodności emotikonów
Rysunek 1. Proces dotyczący czcionek do pobrania.

Podstawy

Z funkcji Pobieranie czcionek możesz korzystać na te sposoby, które są omawiane szczegółowo w następnych sekcjach:

Korzystanie z fontów do pobrania w Android Studio i Usługach Google Play

Aby skonfigurować pobieranie czcionek przez aplikację, użyj Android Studio w wersji 3.0 lub nowszej. Aby zacząć korzystać z funkcji czcionek do pobrania, możesz użyć dostawcy czcionek z usług Google Play.

  1. Edytorze układu kliknij TextView. Następnie w sekcji Atrybuty kliknij fontFamily > Więcej czcionek.
    Ilustracja przedstawiająca edytor układu w Android Studio
    Rysunek 2. za pomocą 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. Kliknij Utwórz czcionkę do pobrania i kliknij OK.
    Obraz pokazujący, jak wybrać czcionki w oknie „Resorce”
    Rysunek 3. Wybieranie czcionki w oknie Zasoby.
  5. Android Studio automatycznie generuje odpowiednie pliki XML potrzebne do prawidłowego renderowania czcionki w aplikacji.

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

Używanie czcionek do pobrania za pomocą kodu

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 Pobieranie czcionek z biblioteki AndroidX Core na tej stronie.

Aby programowo korzystać z funkcji Pobieranie czcionek, musisz korzystać z 2 kluczowych klas:

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

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

  1. Aby poprosić dostawcę o czcionkę, utwórz instancję klasy android.graphics.fonts.FontRequest. Aby utworzyć żądanie, podaj te parametry:
    • Uprawniony dostawca czcionek.
    • Pakiet dostawcy czcionek służący do weryfikacji tożsamości dostawcy.
    • Ciąg zapytania czcionki. Więcej informacji o formatach zapytań znajdziesz w dokumentacji dostawcy czcionek, np. Google Fonts.
    • Lista zestawów haszy 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ąpij metodę onTypefaceRetrieved(), aby wskazać, że żądanie dotyczące czcionki zostało zakończone. Jako parametr podaj odzyskaną czcionkę. Za pomocą tej metody możesz w razie potrzeby ustawić czcionkę. Możesz na przykład ustawić czcionkę w elementach: TextView.
  4. Zastąp metodę onTypefaceRequestFailed() , aby otrzymywać informacje o błędach w procesie żądania czcionek. Więcej informacji o kodach błędów znajdziesz w konstantach kodów błędów.
  5. Wywołaj metodę FontsContract.requestFont(), aby pobrać czcionkę od dostawcy. Metoda inicjuje sprawdzanie, 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 funkcji wywołania zwrotnego. Przekazuj te parametry:
    • instancja klasy Context
    • instancja klasy android.graphics.fonts.FontRequest,
    • wywołanie zwrotne z wynikiem zapytania o czcionkę.
    • Moduł obsługi pobierania czcionek w wątku

Poniższy przykładowy kod ilustruje ogólny proces pobierania czcionek:

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 czcionek od dostawcy znajdziesz w próbnej aplikacji DownloadableFonts.

Korzystanie z czcionek do pobrania w AndroidX Core

AndroidX Core obsługuje funkcję Pobieranie czcionek na urządzeniach z Androidem w wersji API 14 lub nowszej. Pakiet androidx.core.provider zawiera klasy FontsContractCompatFontRequest, które umożliwiają implementację zgodnej wstecznie obsługi funkcji Pobierane czcionki. Klasy AndroidX zawierają metody podobne do metod frameworka, a proces pobierania czcionek jest podobny do opisanego w sekcji na tej stronie dotyczącej korzystania z czcionek do pobrania za pomocą kodu programu.

Aby pobrać czcionki za pomocą AndroidX, zaimportuj klasy FontsContractCompatFontRequest z pakietu androidx.core.provider. Zamiast klas FontsContractandroid.graphics.fonts.FontRequest framework utwórz instancje tych klas.

Dodawanie zależności AndroidX Core

Aby używać klas FontsContractCompatFontRequest, 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ść:

Groovy

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

Kotlin

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

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

Android 8.0 (interfejs API na poziomie 26) i AndroidX Core oferują szybszy i wygodniejszy sposób deklarowania niestandardowej czcionki jako zasobu w układzie XML. Oznacza to, że nie musisz dołączać czcionki jako komponentu. Możesz zdefiniować niestandardową czcionkę dla całego motywu, co przyspieszy korzystanie z różnych 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łuj się do tego pliku jako @font/font_file_name. Możesz też użyć metody getFont(), aby pobrać plik automatycznie, np. getFont(R.font.font_file_name).

Zadeklaruj czcionki w pliku manifestu.

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

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

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

Dodawanie certyfikatów

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

Aby dodać certyfikaty:

  1. Utwórz tablicę ciągu znaków z szczegółami certyfikatu. Więcej informacji o szczegółach certyfikatu 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"

Czcionki do pobrania w edytorze