Używaj czcionek do pobrania

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

Funkcja Czcionki do pobrania pozwala interfejsom API żądać czcionek z aplikacji dostawcy zamiast grupować pliki w aplikacji lub umożliwiać jej pobieranie. 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ę. W ten sposób oszczędzasz komórkową transmisję danych, oszczędzasz pamięć telefonu i miejsce na dysku użytkownika. 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.

Obrazy przedstawiające główne elementy procesu dopasowywania emotikonów
Rysunek 1. proces tworzenia czcionek do pobrania.

Podstawy

Z funkcji Czcionki do pobrania można korzystać na następujące sposoby, które zostały szczegółowo omówione w kolejnych 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. W Edytorze układu wybierz 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 Zasoby
    Rysunek 3. Wybieranie 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. 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. Utwórz instancję klasy android.graphics.fonts.FontRequest, aby zażądać czcionki od dostawcy. Aby utworzyć żądanie, podaj te parametry:
    • Uprawniony organ dostawcy czcionki.
    • 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 w celu 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 zakończone. Jako parametr podaj pobraną czcionkę. Za pomocą tej metody możesz w razie potrzeby ustawić czcionkę. Możesz na przykład ustawić czcionkę w przypadku 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 kodu błędu.
  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ę czcionki, pobiera ją asynchronicznie i przekazuje wynik do wywołania zwrotnego. Przekazuj te parametry:
    • instancja klasy Context
    • instancja klasy android.graphics.fonts.FontRequest,
    • Wywołanie zwrotne w celu otrzymania wyników żądania czcionki
    • Moduł do 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 tym, jak pobrać czcionkę od dostawcy czcionek, znajdziesz w przykładowej 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 AndroidaX zawierają metody podobne do metod platformy, a proces pobierania czcionek jest podobny do opisanego w sekcji na tej stronie dotyczącej programowego korzystania z czcionek do pobrania.

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

Dodaj podstawową zależność AndroidaX

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 tę zależność do pliku build.gradle aplikacji:

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 (poziom interfejsu API 26) i AndroidX Core oferują szybszy i wygodniejszy sposób deklarowania czcionki niestandardowej 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.

Rozwijanie układu i pobieranie zasobów to zadania synchroniczne. Domyślnie pierwsza próba pobrania czcionek powoduje wysłanie żądania do dostawcy czcionek i tym samym wydłuża czas trwania 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 od razu dostępna. 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. Zadeklaruj tablicę zasobów w pliku manifestu za pomocą 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