Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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:
- Spakuj czcionkę jako zasób systemu Android — zapewnia to, że czcionka jest zawsze dostępna dla aplikacji, ale zwiększy rozmiar pakietu APK.
- 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 fontFamily
atrybuty , textStyle
i 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:
- 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.
- 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 doFontsContract
klasy. ElementFontsContract
pobieraFontRequest
i pobiera czcionkę od dostawcy czcionek. System Android synchronicznie pobierze czcionkę. Przykład tworzenia obiektuFontRequest
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:
- fontProviderAuthority — urząd dostawcy czcionek, który ma być używany dla żądania.
- fontPackage — pakiet dostawcy czcionek, który ma być używany dla żądania. Służy do weryfikowania tożsamości dostawcy.
- 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. - 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:
- Urząd dostawcy czcionek — urząd dostawcy czcionek, który ma być używany dla żądania.
- Pakiet czcionek — pakiet dostawcy czcionek, który ma być używany dla żądania. Służy do weryfikowania tożsamości dostawcy.
- 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. - 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 poRequestFont
zakończeniu. Aplikacja platformy Xamarin.Android musi podklasowaćFontsContractCompat.FontRequestCallback
OnTypefaceRequestFailed
i zastąpić elementy iOnTypefaceRetrieved
, podając akcje, które należy wykonać, gdy pobieranie zakończy się niepowodzeniem lub powodzeniem.Handler
— JestHandler
to element, który będzie używany doRequestFont
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.