Używaj czcionek do pobrania

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

Funkcja czcionek do pobrania umożliwia interfejsom API żądanie czcionek z aplikacji dostawcy zamiast dołączania plików do aplikacji lub pobierania czcionek przez aplikację. Czcionki do pobrania są dostępne na urządzeniach z Androidem w wersji 14 lub nowszej dzięki bibliotece AndroidX Core.

Czcionki do pobrania mają te zalety:

  • Zmniejszają rozmiar aplikacji, co zwiększa skuteczność instalacji.
  • Poprawiają ogólną kondycję systemu, ponieważ wiele aplikacji może udostępniać tę samą czcionkę za pomocą dostawcy. Dzięki temu użytkownicy oszczędzają dane komórkowe, pamięć telefonu i miejsce na dysku. W tym modelu czcionka jest pobierana przez sieć, gdy jest potrzebna.
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 lokalnie, aby inne aplikacje mogły żądać i udostępniać czcionki. Proces ten ilustruje rysunek poniżej.

Obraz przedstawiający główne komponenty procesu zgodności emotikonów
Rysunek 1. Proces czcionek do pobrania.

Podstawy

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

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

Możesz skonfigurować aplikację tak, aby pobierała czcionki za pomocą Androida Studio w wersji 3.0 lub nowszej. Aby ułatwić Ci rozpoczęcie pracy z funkcjami 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.
    Obraz przedstawiający 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 obszarze „Do pobrania”.
  4. Kliknij Utwórz czcionkę do pobrania i 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. Wyświetlanie podglądu pliku czcionki.

Programowe korzystanie z czcionek do pobrania

Od Androida 8.0 (interfejs API na poziomie 26) AndroidX Core zapewnia pełną obsługę czcionek do pobrania. Więcej informacji o korzystaniu z biblioteki AndroidX Core znajdziesz w sekcji Biblioteka AndroidX Core czcionek do pobrania na tej stronie.

Aby programowo korzystać z funkcji czcionek do pobrania, użyj 2 kluczowych klas:

Aplikacja pobiera czcionki od dostawcy czcionek za pomocą interfejsu FontsContract API. Każdy dostawca ma własne ograniczenia dotyczące wersji Androida i języka zapytań, które obsługuje. 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 poprosić dostawcę o czcionkę. Aby utworzyć żądanie, przekaż te parametry:
    • Organ dostawcy czcionek.
    • Pakiet dostawcy czcionek, aby zweryfikować tożsamość dostawcy.
    • Ciąg zapytania o czcionkę. Więcej informacji o formatach zapytań znajdziesz w dokumentacji dostawcy czcionek, np. Google Fonts.
    • Lista zestawów skrótów certyfikatów, aby zweryfikować tożsamość 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ę, aby wskazać, że żądanie czcionki zostało zakończone.onTypefaceRetrieved() Podaj pobraną czcionkę jako parametr. Za pomocą tej metody możesz ustawić czcionkę zgodnie z potrzebami. Możesz na przykład ustawić czcionkę w 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. Aby pobrać czcionkę od dostawcy czcionek , wywołaj metodę FontsContract.requestFont(). Metoda inicjuje sprawdzenie, 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 wywołania zwrotnego. Przekaż te parametry:
    • Instancja klasy Context
    • Instancja klasy android.graphics.fonts.FontRequest
    • Wywołanie zwrotne, aby otrzymywać wyniki żądania czcionki
    • Uchwyt do pobierania czcionek w wątku

Ten przykładowy kod ilustruje ogólny proces 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 pobieraniu czcionki od dostawcy czcionek znajdziesz w przykładowej aplikacji DownloadableFonts.

Korzystanie z czcionek do pobrania w AndroidX Core

AndroidX Core obsługuje funkcję czcionek do pobrania na urządzeniach z Androidem w wersji 14 lub nowszej. Pakiet androidx.core.provider zawiera klasy FontsContractCompat i FontRequest, które umożliwiają implementację obsługi czcionek do pobrania zgodnej wstecz. Klasy AndroidX zawierają metody podobne do metod frameworka, a proces pobierania czcionek jest podobny do opisanego w sekcji na tej stronie dotyczącej programowego korzystania z czcionek do pobrania.

Aby pobierać czcionki za pomocą AndroidX, zaimportuj klasy FontsContractCompat i FontRequest z pakietu androidx.core.provider. Zamiast klas frameworka FontsContract i android.graphics.fonts.FontRequest utwórz instancje tych klas.

Dodawanie zależności AndroidX Core

Aby używać klas FontsContractCompat i FontRequest, musisz zmodyfikować zależności classpath projektu aplikacji w środowisku programistycznym.

Aby dodać AndroidX Core do projektu aplikacji, dodaj tę zależność do pliku build.gradle aplikacji:

Dynamiczny

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

Kotlin

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

Korzystanie z 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 czcionki niestandardowej jako zasobu w układzie XML. Oznacza to, że nie musisz dołączać czcionki jako zasobu. Możesz zdefiniować czcionkę niestandardową dla całego motywu, co przyspiesza użyteczność w przypadku wielu grubości i stylów, takich jak pogrubiony, średni lub cienki, 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łaj się do pliku jako @font/font_file_name. Możesz też użyć getFont() metody do programowego pobierania pliku, np. getFont(R.font.font_file_name).

Wstępne deklarowanie czcionek w pliku manifestu

Rozszerzanie układu i pobieranie zasobów to zadania synchroniczne. Domyślnie pierwsza próba pobrania czcionek powoduje wysłanie żądania do dostawcy czcionek, co zwiększa czas pierwszego układu. Aby uniknąć opóźnienia, możesz wstępnie zadeklarować czcionki, które mają zostać pobrane, w pliku manifestu. Gdy system pobierze czcionkę 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. Użyj tagu meta-data, aby zadeklarować tablicę zasobów w pliku manifestu.
  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 podpisany jest 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 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"