Używaj czcionek do pobrania

Wypróbuj Compose
Jetpack Compose to zalecany zestaw narzędzi interfejsu na Androida. Dowiedz się, jak używać tekstu w funkcji Tworzenie.

Funkcja czcionek do pobrania umożliwia interfejsom API wysyłanie próśb o czcionki do aplikacji dostawcy zamiast dołączania plików do aplikacji lub zezwalania na pobieranie czcionek przez aplikację. Czcionki do pobrania są dostępne na urządzeniach z Androidem w wersji API 14 lub nowszej za pomocą biblioteki AndroidX Core.

Czcionki do pobrania zapewniają te korzyści:

  • Zmniejsza rozmiar aplikacji, co zwiększa odsetek instalacji.
  • Poprawia ogólną kondycję systemu, ponieważ wiele aplikacji może udostępniać tę samą czcionkę za pomocą dostawcy. Dzięki temu użytkownicy oszczędzają komórkową transmisję danych, pamięć telefonu i miejsce na dysku. W tym modelu czcionka jest pobierana z sieci w razie potrzeby.
Aby zapoznać się z czcionkami do pobrania, zobacz przykładową aplikację DownloadableFonts.

Jak działają czcionki do pobrania?

Dostawca czcionek to aplikacja, która pobiera czcionki i zapisuje je w pamięci podręcznej na urządzeniu, aby inne aplikacje mogły wysyłać do niej żądania i udostępniać czcionki. Proces ten przedstawiono na poniższym rysunku.

Obraz przedstawiający główne komponenty w procesie zgodności emotikonów
Rysunek 1. procesu pobierania czcionek.

Podstawy

Funkcji czcionek do pobrania możesz używać na te sposoby, które zostały szczegółowo omówione w dalszych sekcjach:

Korzystanie z pobieranych czcionek w Android Studio i Usługach Google Play

Możesz skonfigurować pobieranie czcionek przez aplikację za pomocą Androida Studio 3.0 lub nowszego. Aby ułatwić Ci rozpoczęcie korzystania 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 wybierz fontFamily > Więcej czcionek.
    Ilustracja przedstawiająca edytor układu w Android Studio
    Rysunek 2. Korzystanie z edytora układu.
    Pojawi się okno Zasoby.
  2. W menu Źródło wybierz Google Fonts.
  3. W polu Czcionki wybierz czcionkę w sekcji „Do pobrania”.
  4. Kliknij Utwórz czcionkę do pobraniaOK.
    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. Wyświetlanie podglądu pliku czcionki.

Automatyczne korzystanie z czcionek do pobrania

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

Aby korzystać z funkcji czcionek do pobrania w sposób programowy, używaj 2 klas kluczowych:

Aplikacja pobiera czcionki od dostawcy czcionek za pomocą interfejsu FontsContract API. 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ę, wykonaj te czynności:

  1. Utwórz instancję klasy android.graphics.fonts.FontRequest, aby poprosić dostawcę o czcionkę. Aby utworzyć żądanie, przekaż te parametry:
    • organ dostawcy czcionki.
    • Pakiet dostawcy czcionek do weryfikacji tożsamości dostawcy.
    • Ciąg zapytania czcionki. Więcej informacji o formatach zapytań znajdziesz w dokumentacji dostawcy czcionek, np. w dokumentacji Czcionek Google.
    • Lista zestawów skrótów certyfikatów 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ąp metodę onTypefaceRetrieved() , aby wskazać, że żądanie czcionki zostało zrealizowane. Podaj pobraną czcionkę jako parametr. Za pomocą tej metody możesz ustawić czcionkę zgodnie z potrzebami. Możesz na przykład ustawić czcionkę na 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 stałych kodów błędów.
  5. Wywołaj metodę FontsContract.requestFont(), aby pobrać czcionkę od dostawcy czcionek. Metoda rozpoczyna sprawdzanie, czy czcionka znajduje się w pamięci podręcznej. Jeśli czcionka nie jest dostępna lokalnie, wywołuje dostawcę czcionki, asynchronicznie pobiera czcionkę i przekazuje wynik do wywołania zwrotnego. Przekaż te parametry:
    • Instancja klasy Context
    • Instancja klasy android.graphics.fonts.FontRequest
    • Wywołanie zwrotne, które umożliwia otrzymanie wyników żądania czcionki.
    • 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 czcionki od dostawcy znajdziesz w przykładowej aplikacji DownloadableFonts.

Korzystanie z czcionek do pobrania w Androidzie X Core

AndroidX Core obsługuje funkcję czcionek do pobrania na urządzeniach z Androidem w wersji API 14 lub nowszej. Pakiet androidx.core.provider zawiera klasy FontsContractCompatFontRequest, które umożliwiają wdrożenie zgodnej wstecznie funkcji czcionek do pobrania. Klasy AndroidX zawierają metody podobne do metod platformy, a proces pobierania czcionek jest podobny do tego opisanego w sekcji na tej stronie dotyczącej programowego korzystania z czcionek do pobrania.

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

Dodawanie zależności AndroidX Core

Aby używać klas FontsContractCompatFontRequest, musisz zmodyfikować zależności ścieżki klas 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:1.16.0"
}

Kotlin

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

Używanie czcionek do pobrania jako zasobów w 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 zasobu. Możesz zdefiniować niestandardową czcionkę dla całego motywu, co przyspiesza korzystanie z wielu grubości i stylów, takich jak pogrubiony, średni lub lekki, 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. Odwołuj się do pliku 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ępne deklarowanie czcionek w pliku manifestu

Wypełnianie układu i pobieranie zasobów to zadania synchroniczne. Domyślnie pierwsza próba pobrania czcionek wywołuje żądanie do dostawcy czcionek, co wydłuża czas pierwszego układu. Aby uniknąć opóźnienia, możesz wstępnie zadeklarować w pliku manifestu czcionki, które mają zostać pobrane. Po pobraniu czcionki od dostawcy jest ona od razu dostępna. Jeśli pobieranie czcionki trwa dłużej niż oczekiwano, system przerywa proces pobierania i używa czcionki domyślnej.

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

  1. Utwórz tablicę zasobów w res/values/arrays.xml i zadeklaruj czcionki, które chcesz wstępnie pobrać.
  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 preinstalowany lub używasz biblioteki AndroidX Core, zadeklaruj certyfikaty, którymi jest podpisany dostawca czcionek. System używa certyfikatów do weryfikacji tożsamości dostawcy czcionek.

Aby dodać certyfikaty, wykonaj te czynności:

  1. Utwórz tablicę ciągów znaków ze szczegółami certyfikatu. Więcej informacji o szczegółach certyfikatu znajdziesz w dokumentacji dostawcy czcionki.
  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