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 sekcji Utwórz

Funkcja czcionek do pobrania umożliwia interfejsom API żądanie czcionek z aplikacji dostawcy, zamiast łączenia plików w pakiet lub zezwalania aplikacji na pobieranie czcionek. Czcionki do pobrania są dostępne na urządzeniach z interfejsem API Androida w wersji 14 lub nowszej za pomocą biblioteki AndroidX Core.

Czcionki do pobrania mają następujące zalety:

  • zmniejsza rozmiar aplikacji, co zwiększa wskaźnik instalacji aplikacji.
  • Poprawia ogólny stan systemu, ponieważ wiele aplikacji może korzystać z tej samej czcionki za pośrednictwem dostawcy. W ten sposób oszczędzasz komórkową transmisję danych, a także pamięć telefonu i miejsce na dysku. W tym modelu w razie potrzeby czcionka jest pobierana przez sieć.
Aby mieć możliwość praktycznego korzystania z czcionek do pobrania, zapoznaj się z przykładową aplikacją DownloadableFonts.

Jak działają czcionki do pobrania?

Dostawca czcionek to aplikacja, która pobiera czcionki i zapisuje je lokalnie w pamięci podręcznej, aby inne aplikacje mogły prosić o ich udostępnienie i je udostępniać. Poniższy rysunek ilustruje proces.

Obrazy przedstawiające główne składniki w procesie porównywania emotikonów
Rysunek 1. Proces korzystania z czcionek do pobrania.

Podstawy

Możesz korzystać z funkcji Czcionki do pobrania na następujące sposoby, które zostały szczegółowo omówione w dalszych sekcjach:

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

W Androidzie Studio 3.0 lub nowszym możesz skonfigurować aplikację tak, by pobierała czcionki. Aby łatwiej rozpocząć korzystanie z funkcji czcionek do pobrania, możesz skorzystać z 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. za pomocą 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. Wybierz Utwórz czcionkę do pobrania i kliknij OK.
    Obraz pokazujący, jak wybrać czcionki w oknie Zasoby
    Rysunek 3. wybierając czcionkę w oknie Zasoby.
  5. Android Studio automatycznie generuje odpowiednie pliki XML, które są potrzebne do prawidłowego wyrenderowania czcionki w aplikacji.

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

Automatyczne używanie 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 na temat biblioteki Fonts AndroidX Core na tej stronie.

Aby korzystać z funkcji czcionek do pobrania w sposób zautomatyzowany, użyj 2 klas kluczy:

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 zapytań znajdziesz w dokumentacji dostawcy.

Aby pobrać czcionkę, wykonaj te czynności:

  1. Utwórz instancję klasy android.graphics.fonts.FontRequest, aby zażądać czcionki od dostawcy. Aby utworzyć żądanie, przekaż te parametry:
    • Informacje o urzędach dostawcy czcionek.
    • Pakiet dostawcy czcionki służący do weryfikacji tożsamości dostawcy.
    • Zapytanie tekstowe dotyczące czcionki. Więcej informacji o formatach zapytań znajdziesz w dokumentacji dostawcy czcionki, np. w Google Fonts.
    • Lista zestawów haszów certyfikatów umożliwiających weryfikację 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 ukończone. Podaj pobraną czcionkę jako parametr. Możesz użyć tej metody, aby odpowiednio ustawić czcionkę. Możesz na przykład ustawić czcionkę na stronie TextView.
  4. Zastąp metodę onTypefaceRequestFailed(), aby otrzymywać informacje o błędach w procesie zgłaszania prośby o czcionkę. Więcej informacji o kodach błędów znajdziesz w opisie stałych kodu błędu.
  5. Wywołaj metodę FontsContract.requestFont(), aby pobrać czcionkę od dostawcy czcionki. Ta metoda inicjuje sprawdzanie, czy czcionka istnieje 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 umożliwiające otrzymanie wyników żądania dotyczącego czcionki
    • Moduł obsługi pobierania czcionek w wątku

Ten 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 czcionki 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 interfejsem Android API w wersji 14 lub nowszej. Pakiet androidx.core.provider zawiera klasy FontsContractCompat i FontRequest, które umożliwiają zaimplementowanie zgodnej wstecznie funkcji obsługi czcionek do pobrania. Klasy AndroidX zawierają metody podobne do metod platformy, a proces pobierania czcionek jest podobny do opisanego w sekcji na tej stronie dotyczącej automatycznego korzystania z czcionek do pobrania.

Aby pobrać czcionki za pomocą AndroidaX, zaimportuj klasy FontsContractCompat i FontRequest z pakietu androidx.core.provider. Twórz wystąpienia tych klas zamiast klas platformy FontsContract i android.graphics.fonts.FontRequest.

Dodaj zależność AndroidX Core

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

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

Odlotowy

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 formacie XML

Android 8.0 (poziom interfejsu API 26) i AndroidX Core umożliwiają szybsze i wygodniejsze deklarowanie czcionki niestandardowej jako zasobu w układzie XML. Oznacza to, że nie trzeba łączyć czcionki jako zasób. Możesz zdefiniować niestandardową czcionkę dla całego motywu, co przyspieszy obsługę wielu wag i stylów, takich jak pogrubiona, średnia lub jasna.

  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 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ż ten 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ępne zadeklarowanie czcionek w pliku manifestu

Inflacja układu i pobieranie zasobów to zadania synchroniczne. Domyślnie pierwsza próba pobrania czcionek powoduje wysłanie żądania do dostawcy czcionek, a tym samym wydłużenie pierwszego czasu 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 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 funkcji 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 używasz biblioteki AndroidX Core, zadeklaruj certyfikaty, za pomocą których dostawca czcionki jest podpisany. System używa ich do weryfikacji tożsamości dostawcy czcionki.

Aby dodać certyfikaty, wykonaj te czynności:

  1. Utwórz tablicę z ciągiem znaków ze szczegółami certyfikatu. Więcej informacji o certyfikacie 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 sekcji Utwórz

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