Używaj czcionek do pobrania

Wypróbuj sposób tworzenia wiadomości
Jetpack Compose to zalecany zestaw narzędzi UI na Androida. Dowiedz się, jak używać tekstu w funkcji Compose

Funkcja Czcionki do pobrania pozwala interfejsom API żądać czcionek z aplikacji dostawcy zamiast grupować pliki w aplikacji lub umożliwiać jej pobieranie. Czcionki do pobrania są dostępne na urządzeniach z interfejsem Android API w wersji 14 lub nowszej z biblioteką AndroidX Core.

Czcionki do pobrania zapewniają następujące korzyści:

  • Pozwala to zmniejszyć rozmiar aplikacji, a tym samym zwiększyć liczbę instalacji.
  • Poprawia ogólny stan systemu, ponieważ wiele aplikacji może używać tej samej czcionki za pośrednictwem dostawcy. 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 w razie potrzeby pobierana przez sieć.
Aby dowiedzieć się, jak korzystać z czcionek do pobrania, sprawdź przykładową aplikację DownloadableFonts.

Jak działają czcionki do pobrania?

Dostawca czcionek to aplikacja, która pobiera czcionki i przechowuje je w pamięci podręcznej, aby inne aplikacje mogły żądać czcionek i je udostępniać. Poniższy rysunek przedstawia cały proces.

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:

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

W Android Studio 3.0 lub nowszym możesz skonfigurować pobieranie czcionek w aplikacji. Aby łatwiej zacząć korzystać z funkcji dostępnych 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.
    Ilustracja pokazująca Edytor układów w Android Studio
    Rysunek 2. za pomocą Edytora układów.
    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. wybrać czcionkę w oknie Zasoby,
  5. Android Studio automatycznie generuje odpowiednie pliki XML, które są potrzebne do poprawnego renderowania czcionki w aplikacji.

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

Automatyczne korzystanie z czcionek do pobrania

Od Androida 8.0 (poziom interfejsu API 26) AndroidX Core w pełni obsługuje czcionki do pobrania. Więcej informacji o korzystaniu z biblioteki AndroidX Core znajdziesz w sekcji biblioteki Czcionki AndroidX Core do pobrania na tej stronie.

Aby automatycznie używać funkcji Czcionki do pobrania, 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 wersji Androida i języka zapytań, które obsługuje. Więcej informacji o wersjach Androida i formacie zapytania znajdziesz w dokumentacji dostawcy.

Aby pobrać czcionkę:

  1. Utwórz instancję klasy android.graphics.fonts.FontRequest, aby zażądać czcionki od dostawcy. Aby utworzyć żądanie, przekaż te parametry:
    • Uprawnienia dostawcy czcionek.
    • Pakiet dostawcy czcionek do weryfikacji tożsamości dostawcy.
    • Zapytanie w postaci ciągu znaków dotyczące czcionki. Więcej informacji o formatach zapytań znajdziesz w dokumentacji dostawcy czcionek, np. w usłudze 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ę. W ten sposób możesz odpowiednio ustawić czcionkę. Możesz na przykład ustawić czcionkę w polu 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 opisie stałych kodów błędów.
  5. Wywołaj metodę FontsContract.requestFont(), aby pobrać czcionkę od jej dostawcy. Ta 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. Przekaż 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

Następujący przykładowy kod ilustruje ogólny proces pobierania 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 tym, jak pobrać czcionkę od dostawcy czcionek, znajdziesz w przykładowej aplikacji DownloadableFonts.

Używanie czcionek do pobrania w AndroidX Core

AndroidX Core zapewnia obsługę funkcji Czcionki do pobrania na urządzeniach z Androidem API w wersji 14 lub nowszej. Pakiet androidx.core.provider zawiera klasy FontsContractCompat i FontRequest, które implementują zgodną wstecznie funkcję obsługi czcionek do pobrania. 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:

Odlotowe

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

Kotlin

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

Używaj 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 trzeba łączyć czcionki jako zasobu. Możesz zdefiniować niestandardową czcionkę dla całego motywu, co przyspieszy obsługę różnych stylów i grubości, np. pogrubienie, średni lub jasny (jeśli jest 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 czcionkami, 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. Wskaż plik jako @font/font_file_name w pliku XML układu. Możesz też użyć metody getFont(), aby pobrać plik automatycznie, np. getFont(R.font.font_file_name).

Wstępna deklaracja czcionek w pliku manifestu

Wypełnianie 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óźnienia, możesz wstępnie zadeklarować czcionki, które trzeba pobrać 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ż zwykle, system przerwie proces pobierania i użyje czcionki domyślnej.

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

  1. Utwórz tablicę zasobów w zadaniu res/values/arrays.xml i zadeklaruj czcionki, które chcesz pobierać 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. Zadeklaruj tablicę zasobów w pliku manifestu za pomocą tagu meta-data.
  4. <meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" />
    

Dodaj certyfikaty

Jeśli dostawca czcionki nie jest wstępnie zainstalowany lub jeśli korzystasz z biblioteki AndroidX Core, zadeklaruj certyfikaty, za pomocą których jest on podpisany. System używa certyfikatów do weryfikowania tożsamości dostawcy czcionek.

Aby dodać certyfikaty, wykonaj te czynności:

  1. Utwórz tablicę ciągu znaków ze 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 Compose

Od wersji Compose 1.2-alfa07 możesz używać interfejsu Downloadable Fonts API w aplikacji Compose, aby asynchronicznie pobierać czcionki Google i używać ich w aplikacji. Więcej informacji znajdziesz w dokumentacji dotyczącej tworzenia czcionek do pobrania.