Udostępnij za pośrednictwem


Czcionki

Omówienie

Począwszy od poziomu 26 interfejsu API, zestaw SDK systemu Android umożliwia traktowanie czcionek jako zasobów, podobnie jak układy lub elementy rysowalne. Biblioteka obsługi systemu Android 26 NuGet będzie przywracać nowe interfejsy API czcionek do tych aplikacji, które są przeznaczone dla interfejsu API na poziomie 14 lub wyższym.

Po zastosowaniu interfejsu API 26 lub zainstalowaniu biblioteki obsługi systemu Android w wersji 26 istnieją dwa sposoby używania czcionek w aplikacji systemu Android:

  1. Spakuj czcionkę jako zasób systemu Android — zapewnia to, że czcionka jest zawsze dostępna dla aplikacji, ale zwiększy rozmiar pakietu APK.
  2. Pobieranie czcionek — system Android obsługuje również pobieranie czcionki od dostawcy czcionek. Dostawca czcionek sprawdza, czy czcionka jest już na urządzeniu. W razie potrzeby czcionka zostanie pobrana i zbuforowana na urządzeniu. Ta czcionka może być współdzielona między wieloma aplikacjami.

Podobne czcionki (lub czcionka, która może mieć kilka różnych stylów) mogą być pogrupowane w rodziny czcionek. Dzięki temu deweloperzy mogą określić pewne atrybuty czcionki, takie jak waga, a system Android automatycznie wybierze odpowiednią czcionkę z rodziny czcionek.

Biblioteka obsługi systemu Android w wersji 26 będzie obsługiwać backport dla czcionek na poziomie 26 interfejsu API. W przypadku określania wartości docelowych dla starszych poziomów interfejsu API należy zadeklarować app przestrzeń nazw XML i nazwać różne atrybuty czcionki przy użyciu android: przestrzeni nazw i app: przestrzeni nazw. Jeśli jest używana tylko android: przestrzeń nazw, czcionki nie będą wyświetlane na urządzeniach z poziomem interfejsu API 25 lub mniejszym. Na przykład ten fragment kodu XML deklaruje nowy zasób rodziny czcionek, który będzie działać na poziomie 14 interfejsu API i wyższym:

<?xml version="1.0" encoding="utf-8"?>
<font-family
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

     <font  android:font="@font/sourcesanspro_regular"
            android:fontStyle="normal"
            android:fontWeight="400"
            app:font="@font/sourcesanspro_regular"
            app:fontStyle="normal"
            app:fontWeight="400" />

</font-family>

Tak długo, jak czcionki są dostarczane do aplikacji systemu Android w odpowiedni sposób, można je zastosować do widżetu interfejsu fontFamily użytkownika, ustawiając atrybut. Na przykład poniższy fragment kodu pokazuje, jak wyświetlić czcionkę w obiekcie TextView:

<TextView
    android:text="The quick brown fox jumped over the lazy dog."
    android:fontFamily="@font/sourcesanspro_regular"
    app:fontFamily="@font/sourcesanspro_regular"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

W tym przewodniku najpierw omówiono sposób używania czcionek jako zasobu systemu Android, a następnie przejdź dalej, aby omówić sposób pobierania czcionek w czasie wykonywania.

Czcionki jako zasób

Pakowanie czcionki do pakietu ANDROID APK gwarantuje, że jest ona zawsze dostępna dla aplikacji. Plik czcionki (albo . TTF lub . Plik OTF) jest dodawany do aplikacji platformy Xamarin.Android podobnie jak każdy inny zasób, kopiując pliki do podkatalogu w folderze Resources projektu platformy Xamarin.Android. Zasoby czcionek są przechowywane w podkatalogu czcionek folderu Resources projektu.

Uwaga

Czcionki powinny mieć akcję kompilacji AndroidResource lub nie zostaną spakowane do końcowego pakietu APK. Akcja kompilacji powinna być automatycznie ustawiana przez środowisko IDE.

Jeśli istnieje wiele podobnych plików czcionek (na przykład ta sama czcionka o różnych wagach lub stylach), można je zgrupować w rodzinie czcionek.

Rodziny czcionek

Rodzina czcionek to zestaw czcionek, które mają różne wagi i style. Na przykład mogą istnieć oddzielne pliki czcionek dla czcionek pogrubionych lub kursywych. Rodzina czcionek jest definiowana przez font elementy w pliku XML przechowywanym w katalogu Resources/font . Każda rodzina czcionek powinna mieć własny plik XML.

Aby utworzyć rodzinę czcionek, najpierw dodaj wszystkie czcionki do folderu Resources/font . Następnie utwórz nowy plik XML w folderze czcionek dla rodziny czcionek. Nazwa pliku XML nie ma koligacji ani relacji z przywoływanymi czcionkami; plik zasobu może być dowolną legalną nazwą pliku zasobu systemu Android. Ten plik XML będzie miał element główny font-family zawierający co najmniej jeden font element. Każdy font element deklaruje atrybuty czcionki.

Poniższy kod XML jest przykładem rodziny czcionek dla czcionki Sources Sans Pro , która definiuje wiele różnych wag czcionek. Jest on zapisywany jako plik w folderze Resources/font o nazwie sourcesanspro.xml:

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:app="http://schemas.android.com/apk/res-auto">
    <font android:font="@font/sourcesanspro_regular"
          android:fontStyle="normal"
          android:fontWeight="400"
          app:font="@font/sourcesanspro_regular"
          app:fontStyle="normal"
          app:fontWeight="400" />
    <font android:font="@font/sourcesanspro_bold"
          android:fontStyle="normal"
          android:fontWeight="800"
          app:font="@font/sourcesanspro_bold"
          app:fontStyle="normal"
          app:fontWeight="800" />
    <font android:font="@font/sourcesanspro_italic"
          android:fontStyle="italic"
          android:fontWeight="400"
          app:font="@font/sourcesanspro_italic"
          app:fontStyle="italic"
          app:fontWeight="400" />
</font-family>

Atrybut fontStyle ma dwie możliwe wartości:

  • normal — normalna czcionka
  • kursywa — czcionka kursywa

Atrybut fontWeight odpowiada atrybutowi CSS font-weight i odnosi się do grubości czcionki. Jest to wartość z zakresu od 100 do 900. Poniższa lista zawiera opis typowych wartości wagi czcionek i ich nazwy:

  • Cienki – 100
  • Dodatkowe światło – 200
  • Jasny – 300
  • Normalny – 400
  • Średni – 500
  • Średni pogrubienie — 600
  • Pogrubienie — 700
  • Dodatkowe pogrubienie — 800
  • Czarny – 900

Po zdefiniowaniu rodziny czcionek można jej użyć deklaratywnie, ustawiając fontFamilyatrybuty , textStylei fontWeight w pliku układu. Na przykład poniższy fragment kodu XML ustawia czcionkę o wadze 600 (normalną) i kursywę stylu tekstu:

<TextView
    android:text="Sans Source Pro semi-bold italic, 600 weight, italic"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fontFamily="@font/sourcesanspro"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:gravity="center_horizontal"
    android:fontWeight="600"
    android:textStyle="italic"
    />

Programowe przypisywanie czcionek

Czcionki można ustawić programowo przy użyciu Resources.GetFont metody w celu pobrania Typeface obiektu. Wiele widoków ma TypeFace właściwość, która może służyć do przypisywania czcionki do widżetu. Ten fragment kodu pokazuje, jak programowo ustawić czcionkę w kodzie TextView:

Android.Graphics.Typeface typeface = this.Resources.GetFont(Resource.Font.caveat_regular);
textView1.Typeface = typeface;
textView1.Text = "Changed the font";

Metoda GetFont automatycznie załaduje pierwszą czcionkę w rodzinie czcionek. Aby załadować czcionkę zgodną z określonym stylem, użyj Typeface.Create metody . Ta metoda spróbuje załadować czcionkę zgodną z określonym stylem. Na przykład ten fragment kodu spróbuje załadować pogrubiony Typeface obiekt z rodziny czcionek zdefiniowanej w obszarze Zasoby/czcionki:

var typeface = Typeface.Create("<FONT FAMILY NAME>", Android.Graphics.TypefaceStyle.Bold);
textView1.Typeface = typeface;

Pobieranie czcionek

Zamiast pakować czcionki jako zasób aplikacji, system Android może pobierać czcionki ze źródła zdalnego. Będzie to miało pożądany wpływ na zmniejszenie rozmiaru apk.

Czcionki są pobierane z pomocą dostawcy czcionek. Jest to wyspecjalizowany dostawca zawartości, który zarządza pobieraniem i buforowaniem czcionek we wszystkich aplikacjach na urządzeniu. System Android 8.0 zawiera dostawcę czcionek do pobierania czcionek z repozytorium czcionek Google. Ten domyślny dostawca czcionek jest przywracany do poziomu 14 interfejsu API z biblioteką pomocy technicznej systemu Android w wersji 26.

Gdy aplikacja wysyła żądanie czcionki, dostawca czcionek najpierw sprawdzi, czy czcionka jest już na urządzeniu. Jeśli nie, spróbuje pobrać czcionkę. Jeśli nie można pobrać czcionki, system Android użyje domyślnej czcionki systemowej. Po pobraniu czcionki jest ona dostępna dla wszystkich aplikacji na urządzeniu, a nie tylko aplikacji, która złożyła początkowe żądanie.

Po wysłaniu żądania pobrania czcionki aplikacja nie wykonuje bezpośredniego zapytania względem dostawcy czcionek. Zamiast tego aplikacje będą używać wystąpienia interfejsu FontsContract API (lub FontsContractCompat jeśli jest używana biblioteka pomocy technicznej 26).

System Android 8.0 obsługuje pobieranie czcionek na dwa różne sposoby:

  1. Zadeklaruj czcionki do pobrania jako zasób — aplikacja może zadeklarować możliwe do pobrania czcionki do systemu Android za pomocą plików zasobów XML. Te pliki będą zawierać wszystkie metadane, które system Android musi asynchronicznie pobrać czcionki po uruchomieniu aplikacji i buforować je na urządzeniu.
  2. Programowo — interfejsy API na poziomie 26 interfejsów API systemu Android umożliwiają aplikacji programowe pobieranie czcionek, gdy aplikacja jest uruchomiona. Aplikacje będą tworzyć FontRequest obiekt dla danej czcionki i przekazywać ten obiekt do FontsContract klasy. Element FontsContract pobiera FontRequest i pobiera czcionkę od dostawcy czcionek. System Android synchronicznie pobierze czcionkę. Przykład tworzenia obiektu FontRequest zostanie wyświetlony w dalszej części tego przewodnika.

Niezależnie od tego, które podejście jest używane, pliki zasobów, które należy dodać do aplikacji platformy Xamarin.Android przed pobraniem czcionek. Najpierw czcionki muszą być zadeklarowane w pliku XML w katalogu Resources/font w ramach rodziny czcionek . Ten fragment kodu to przykład pobierania czcionek z kolekcji Open Source Czcionek Google przy użyciu domyślnego dostawcy czcionek dostarczanego z systemem Android 8.0 (lub biblioteką pomocy technicznej w wersji 26):

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:app="http://schemas.android.com/apk/res-auto"
             android:fontProviderAuthority="com.google.android.gms.fonts"
             android:fontProviderPackage="com.google.android.gms"
             android:fontProviderQuery="VT323"
             android:fontProviderCerts="@array/com_google_android_gms_fonts_certs"
             app:fontProviderAuthority="com.google.android.gms.fonts"
             app:fontProviderPackage="com.google.android.gms"
             app:fontProviderQuery="VT323"
             app:fontProviderCerts="@array/com_google_android_gms_fonts_certs"
>
</font-family>

Element font-family zawiera następujące atrybuty, deklarując informacje wymagane przez system Android do pobrania czcionek:

  1. fontProviderAuthority — urząd dostawcy czcionek, który ma być używany dla żądania.
  2. fontPackage — pakiet dostawcy czcionek, który ma być używany dla żądania. Służy do weryfikowania tożsamości dostawcy.
  3. fontQuery — jest to ciąg, który pomoże dostawcy czcionek zlokalizować żądaną czcionkę. Szczegółowe informacje na temat zapytania czcionki są specyficzne dla dostawcy czcionek. Klasa QueryBuilder w przykładowej aplikacji Pobrane czcionki zawiera pewne informacje na temat formatu zapytania dla czcionek z kolekcji open source czcionek Google.
  4. fontProviderCerts — tablica zasobów z listą zestawów skrótów certyfikatów, z którymi powinien być podpisany dostawca.

Po zdefiniowaniu czcionek może być konieczne podanie informacji o certyfikatach czcionek związanych z pobieraniem.

Certyfikaty czcionek

Jeśli dostawca czcionek nie jest wstępnie zainstalowany na urządzeniu lub jeśli aplikacja korzysta z Xamarin.Android.Support.Compat biblioteki, system Android wymaga certyfikatów zabezpieczeń dostawcy czcionek. Te certyfikaty będą wyświetlane w pliku zasobów tablicy, który jest przechowywany w katalogu Resources/values .

Na przykład następujący kod XML nosi nazwę Resources/values/fonts_cert.xml i przechowuje certyfikaty dostawcy czcionek Google:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="com_google_android_gms_fonts_certs">
        <item>@array/com_google_android_gms_fonts_certs_dev</item>
        <item>@array/com_google_android_gms_fonts_certs_prod</item>
    </array>
    <string-array name="com_google_android_gms_fonts_certs_dev">
        <item>
            MIIEqDCCA5CgAwIBAgIJANWFuGx90071MA0GCSqGSIb3DQEBBAUAMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAeFw0wODA0MTUyMzM2NTZaFw0zNTA5MDEyMzM2NTZaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBANbOLggKv+IxTdGNs8/TGFy0PTP6DHThvbbR24kT9ixcOd9W+EaBPWW+wPPKQmsHxajtWjmQwWfna8mZuSeJS48LIgAZlKkpFeVyxW0qMBujb8X8ETrWy550NaFtI6t9+u7hZeTfHwqNvacKhp1RbE6dBRGWynwMVX8XW8N1+UjFaq6GCJukT4qmpN2afb8sCjUigq0GuMwYXrFVee74bQgLHWGJwPmvmLHC69EH6kWr22ijx4OKXlSIx2xT1AsSHee70w5iDBiK4aph27yH3TxkXy9V89TDdexAcKk/cVHYNnDBapcavl7y0RiQ4biu8ymM8Ga/nmzhRKya6G0cGw8CAQOjgfwwgfkwHQYDVR0OBBYEFI0cxb6VTEM8YYY6FbBMvAPyT+CyMIHJBgNVHSMEgcEwgb6AFI0cxb6VTEM8YYY6FbBMvAPyT+CyoYGapIGXMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbYIJANWFuGx90071MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADggEBABnTDPEF+3iSP0wNfdIjIz1AlnrPzgAIHVvXxunW7SBrDhEglQZBbKJEk5kT0mtKoOD1JMrSu1xuTKEBahWRbqHsXclaXjoBADb0kkjVEJu/Lh5hgYZnOjvlba8Ld7HCKePCVePoTJBdI4fvugnL8TsgK05aIskyY0hKI9L8KfqfGTl1lzOv2KoWD0KWwtAWPoGChZxmQ+nBli+gwYMzM1vAkP+aayLe0a1EQimlOalO762r0GXO0ks+UeXde2Z4e+8S/pf7pITEI/tP+MxJTALw9QUWEv9lKTk+jkbqxbsh8nfBUapfKqYn0eidpwq2AzVp3juYl7//fKnaPhJD9gs=
        </item>
    </string-array>
    <string-array name="com_google_android_gms_fonts_certs_prod">
        <item>
            MIIEQzCCAyugAwIBAgIJAMLgh0ZkSjCNMA0GCSqGSIb3DQEBBAUAMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDAeFw0wODA4MjEyMzEzMzRaFw0zNjAxMDcyMzEzMzRaMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBAKtWLgDYO6IIrgqWbxJOKdoR8qtW0I9Y4sypEwPpt1TTcvZApxsdyxMJZ2JORland2qSGT2y5b+3JKkedxiLDmpHpDsz2WCbdxgxRczfey5YZnTJ4VZbH0xqWVW/8lGmPav5xVwnIiJS6HXk+BVKZF+JcWjAsb/GEuq/eFdpuzSqeYTcfi6idkyugwfYwXFU1+5fZKUaRKYCwkkFQVfcAs1fXA5V+++FGfvjJ/CxURaSxaBvGdGDhfXE28LWuT9ozCl5xw4Yq5OGazvV24mZVSoOO0yZ31j7kYvtwYK6NeADwbSxDdJEqO4k//0zOHKrUiGYXtqw/A0LFFtqoZKFjnkCAQOjgdkwgdYwHQYDVR0OBBYEFMd9jMIhF1Ylmn/Tgt9r45jk14alMIGmBgNVHSMEgZ4wgZuAFMd9jMIhF1Ylmn/Tgt9r45jk14aloXikdjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIEluYy4xEDAOBgNVBAsTB0FuZHJvaWQxEDAOBgNVBAMTB0FuZHJvaWSCCQDC4IdGZEowjTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4IBAQBt0lLO74UwLDYKqs6Tm8/yzKkEu116FmH4rkaymUIE0P9KaMftGlMexFlaYjzmB2OxZyl6euNXEsQH8gjwyxCUKRJNexBiGcCEyj6z+a1fuHHvkiaai+KL8W1EyNmgjmyy8AW7P+LLlkR+ho5zEHatRbM/YAnqGcFh5iZBqpknHf1SKMXFh4dd239FJ1jWYfbMDMy3NS5CTMQ2XFI1MvcyUTdZPErjQfTbQe3aDQsQcafEQPD+nqActifKZ0Np0IS9L9kR/wbNvyz6ENwPiTrjV2KRkEjH78ZMcUQXg0L3BYHJ3lc69Vs5Ddf9uUGGMYldX3WfMBEmh/9iFBDAaTCK
        </item>
    </string-array>
</resources>

Dzięki tym plikom zasobów aplikacja może pobierać czcionki.

Deklarowanie czcionek do pobrania jako zasobów

Wyświetlając listę czcionek do pobrania w AndroidManifest.XML, system Android asynchronicznie pobierze czcionki po pierwszym uruchomieniu aplikacji. Czcionka jest wyświetlana w pliku zasobów tablicy, podobnie jak w tym:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="downloadable_fonts" translatable="false">
        <item>@font/vt323</item>
    </array>
</resources>

Aby pobrać te czcionki, należy je zadeklarować w AndroidManifest.XML przez dodanie meta-data go jako elementu podrzędnegoapplication. Jeśli na przykład czcionki do pobrania są deklarowane w pliku zasobów w folderze Resources/values/downloadable_fonts.xml, ten fragment kodu musi zostać dodany do manifestu:

<meta-data android:name="downloadable_fonts" android:resource="@array/downloadable_fonts" />

Pobieranie czcionki przy użyciu interfejsów API czcionek

Można programowo pobrać czcionkę, tworząc wystąpienie FontRequest obiektu i przekazując ją do FontContractCompat.RequestFont metody . FontContractCompat.RequestFont Metoda najpierw sprawdzi, czy czcionka istnieje na urządzeniu, a następnie w razie potrzeby asynchronicznie wyśle zapytanie do dostawcy czcionek i spróbuje pobrać czcionkę dla aplikacji. Jeśli FontRequest nie można pobrać czcionki, system Android użyje domyślnej czcionki systemowej.

FontRequest Obiekt zawiera informacje, które będą używane przez dostawcę czcionek do lokalizowania i pobierania czcionki. Element FontRequest wymaga czterech informacji:

  1. Urząd dostawcy czcionek — urząd dostawcy czcionek, który ma być używany dla żądania.
  2. Pakiet czcionek — pakiet dostawcy czcionek, który ma być używany dla żądania. Służy do weryfikowania tożsamości dostawcy.
  3. Zapytanie o czcionkę — jest to ciąg, który pomoże dostawcy czcionek zlokalizować żądaną czcionkę. Szczegółowe informacje na temat zapytania czcionki są specyficzne dla dostawcy czcionek. Szczegóły ciągu są specyficzne dla dostawcy czcionek. Klasa QueryBuilder w przykładowej aplikacji Pobrane czcionki zawiera pewne informacje na temat formatu zapytania dla czcionek z kolekcji open source czcionek Google.
  4. Certyfikaty dostawcy czcionek — tablica zasobów z listą zestawów skrótów dla certyfikatów, z których dostawca powinien być podpisany.

Ten fragment kodu jest przykładem utworzenia wystąpienia nowego FontRequest obiektu:

FontRequest request = new FontRequest("com.google.android.gms.fonts", "com.google.android.gms", <FontToDownload>, Resource.Array.com_google_android_gms_fonts_certs);

W poprzednim fragmencie FontToDownload kodu jest zapytaniem, które pomoże czcionki z kolekcji Open Source czcionek Google.

Przed przekazaniem metody FontRequest do FontContractCompat.RequestFont metody należy utworzyć dwa obiekty:

  • FontsContractCompat.FontRequestCallback — Jest to abstrakcyjna klasa, która musi zostać rozszerzona. Jest to wywołanie zwrotne, które zostanie wywołane po RequestFont zakończeniu. Aplikacja platformy Xamarin.Android musi podklasować FontsContractCompat.FontRequestCallbackOnTypefaceRequestFailed i zastąpić elementy i OnTypefaceRetrieved, podając akcje, które należy wykonać, gdy pobieranie zakończy się niepowodzeniem lub powodzeniem.
  • Handler — Jest Handler to element, który będzie używany do RequestFont pobierania czcionki w wątku, jeśli to konieczne. Czcionki nie powinny być pobierane w wątku interfejsu użytkownika.

Ten fragment kodu jest przykładem klasy języka C#, która asynchronicznie pobierze czcionkę z kolekcji Open Source czcionek Google. Implementuje FontRequestCallback interfejs i zgłasza zdarzenie języka C# po FontRequest zakończeniu.

public class FontDownloadHelper : FontsContractCompat.FontRequestCallback
{
    // A very simple font query; replace as necessary
    public static readonly String FontToDownload = "Courgette";

    Android.OS.Handler Handler = null;

    public event EventHandler<FontDownloadEventArg> FontDownloaded = delegate
    {
        // just an empty delegate to avoid null reference exceptions.  
    };

    public void DownloadFonts(Context context)
    {
        FontRequest request = new FontRequest("com.google.android.gms.fonts", "com.google.android.gms",FontToDownload , Resource.Array.com_google_android_gms_fonts_certs);
        FontsContractCompat.RequestFont(context, request, this, GetHandlerThreadHandler());
    }

    public override void OnTypefaceRequestFailed(int reason)
    {
        base.OnTypefaceRequestFailed(reason);
        FontDownloaded(this, new FontDownloadEventArg(null));
    }

    public override void OnTypefaceRetrieved(Android.Graphics.Typeface typeface)
    {
        base.OnTypefaceRetrieved(typeface);
        FontDownloaded(this, new FontDownloadEventArg(typeface));
    }

    Handler GetHandlerThreadHandler()
    {
        if (Handler == null)
        {
            HandlerThread handlerThread = new HandlerThread("fonts");
            handlerThread.Start();
            Handler = new Handler(handlerThread.Looper);
        }
        return Handler;
    }
}

public class FontDownloadEventArg : EventArgs
{
    public FontDownloadEventArg(Android.Graphics.Typeface typeface)
    {
        Typeface = typeface;
    }
    public Android.Graphics.Typeface Typeface { get; private set; }
    public bool RequestFailed
    {
        get
        {
            return Typeface != null;
        }
    }
}

Aby użyć tego pomocnika, zostanie utworzona nowa FontDownloadHelper i zostanie przypisana procedura obsługi zdarzeń:

var fontHelper = new FontDownloadHelper();

fontHelper.FontDownloaded += (object sender, FontDownloadEventArg e) =>
{
    //React to the request
};
fontHelper.DownloadFonts(this); // this is an Android Context instance.

Podsumowanie

W tym przewodniku omówiono nowe interfejsy API w systemie Android 8.0 do obsługi czcionek i czcionek do pobrania jako zasobów. Omówiono w nim sposób osadzania istniejących czcionek w zestawie APK i używania ich w układzie. Omówiono również, jak system Android 8.0 obsługuje pobieranie czcionek od dostawcy czcionek programowo lub przez deklarowanie metadanych czcionki w plikach zasobów.