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.
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 Czcionki do pobrania można korzystać na następujące sposoby, które zostały szczegółowo omówione w kolejnych 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 wybierz
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, które są 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 pozwala utworzyć nowy obiektTypeface
na podstawie żądania 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:
- 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);
- Utwórz instancję klasy
FontsContract.FontRequestCallback
. - 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 przypadkuTextView
. - 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. - 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
- 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 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 FontsContractCompat
i FontRequest
, 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).
- 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.
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:
- Utwórz tablicę zasobów w
res/values/arrays.xml
i oznacz czcionki, które chcesz pobrać z poziomu pamięci podręcznej. - Zadeklaruj tablicę zasobów w pliku manifestu za pomocą 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"