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.
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.
Podstawy
Z funkcji Pobieranie czcionek możesz korzystać na te sposoby, które są omawiane szczegółowo w następnych sekcjach:
- Korzystanie z Android Studio i Usług Google Play
- Automatycznie
- Korzystanie z biblioteki AndroidX Core
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.
- W Edytorze układu kliknij
TextView
. Następnie w sekcji Atrybuty kliknij fontFamily > Więcej czcionek. Pojawi się okno Zasoby. - W menu Źródło wybierz Google Fonts.
- W polu Czcionki wybierz czcionkę w obszarze „Do pobrania”.
- Kliknij Utwórz czcionkę do pobrania i kliknij OK.
Android Studio automatycznie generuje odpowiednie pliki XML potrzebne do prawidłowego renderowania czcionki w aplikacji.
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:
android.graphics.fonts.FontRequest
: ta klasa umożliwia tworzenie prośby o font.FontsContractCompat
: ta klasa umożliwia tworzenie nowych obiektówTypeface
na podstawie żądania dotyczącego czcionki.
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:
- 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);
- Utwórz instancję klasy
FontsContract.FontRequestCallback
. - 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
. - 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. - 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
- instancja klasy
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 FontsContractCompat
i FontRequest
, 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 FontsContractCompat
i FontRequest
z pakietu androidx.core.provider
. Zamiast klas FontsContract
i android.graphics.fonts.FontRequest
framework 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ść:
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).
- Utwórz nowy plik XML w folderze
res/font
. - Dodaj element główny
<font-family>
i ustaw atrybuty związane z czcionką, jak pokazano w tym przykładowym pliku XML: - W pliku XML układu odwołuj się do tego pliku jako
@font/font_file_name
. Możesz też użyć metodygetFont()
, aby pobrać plik automatycznie, np.getFont(R.font.font_file_name)
.
<?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>
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:
- Utwórz tablicę zasobów w
res/values/arrays.xml
i oznacz czcionki, które chcesz pobrać z poziomu pamięci podręcznej. - Aby zadeklarować tablicę zasobów w pliku manifestu, użyj tagu
meta-data
.
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>
<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:
- Utwórz tablicę ciągu znaków z szczegółami certyfikatu. Więcej informacji o szczegółach certyfikatu znajdziesz w dokumentacji dostawcy czcionek.
- Ustaw atrybut
fontProviderCerts
na tablicę.
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="certs"> <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item> </string-array> </resources>
android:fontProviderCerts="@array/certs"