Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Übersicht
Ab API-Ebene 26 ermöglicht das Android SDK die Behandlung von Schriftarten als Ressourcen, genau wie layouts oder drawables. Die Android-Supportbibliothek 26 NuGet gibt die neuen Schriftart-APIs auf die Apps zurück, die auf API-Ebene 14 oder höher abzielen.
Nach der Zielbestimmung von API 26 oder der Installation der Android-Supportbibliothek v26 gibt es zwei Möglichkeiten, Schriftarten in einer Android-Anwendung zu verwenden:
- Packen Sie die Schriftart als Android-Ressource – dadurch wird sichergestellt, dass die Schriftart immer für die Anwendung verfügbar ist, aber die Größe der APK erhöht.
- Herunterladen der Schriftarten – Android unterstützt auch das Herunterladen einer Schriftart von einem Schriftartanbieter. Der Schriftartanbieter überprüft, ob die Schriftart bereits auf dem Gerät vorhanden ist. Bei Bedarf wird die Schriftart heruntergeladen und auf dem Gerät zwischengespeichert. Diese Schriftart kann zwischen mehreren Anwendungen gemeinsam verwendet werden.
Ähnliche Schriftarten (oder eine Schriftart, die möglicherweise mehrere verschiedene Formatvorlagen aufweist) können in Schriftfamilien gruppiert werden. Auf diese Weise können Entwickler bestimmte Attribute der Schriftart angeben, z. B. die Stärke, und Android wählt automatisch die entsprechende Schriftart aus der Schriftartfamilie aus.
Die Android-Supportbibliothek v26 unterstützt Schriftarten auf API-Ebene 26 zurück. Wenn Sie auf die älteren API-Ebenen abzielen, müssen Sie den app
XML-Namespace deklarieren und die verschiedenen Schriftartattribute mithilfe des android:
Namespaces und des app:
Namespace benennen. Wenn nur der android:
Namespace verwendet wird, werden die Schriftarten nicht angezeigt, auf denen die API-Ebene 25 oder weniger ausgeführt wird. Dieser XML-Codeausschnitt deklariert beispielsweise eine neue Ressourcen für die Schriftfamilie , die in API-Ebene 14 und höher funktioniert:
<?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>
Solange Schriftarten für eine Android-Anwendung ordnungsgemäß bereitgestellt werden, können sie auf ein UI-Widget angewendet werden, indem sie das fontFamily
Attribut festlegen. Der folgende Codeausschnitt veranschaulicht beispielsweise, wie eine Schriftart in einer TextView angezeigt wird:
<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" />
In diesem Leitfaden wird zuerst erläutert, wie Schriftarten als Android-Ressource verwendet werden, und dann weiter, um zu diskutieren, wie Schriftarten zur Laufzeit heruntergeladen werden.
Schriftarten als Ressource
Das Verpacken einer Schriftart in ein Android APK stellt sicher, dass sie immer für die Anwendung verfügbar ist. Eine Schriftartdatei (entweder ein . TTF oder ein . OTF-Datei) wird einer Xamarin.Android-Anwendung wie jeder anderen Ressource hinzugefügt, indem Dateien in ein Unterverzeichnis im Ordner "Ressourcen " eines Xamarin.Android-Projekts kopiert werden. Schriftartenressourcen werden in einem Schriftartenunterverzeichnis des Ordners "Ressourcen " des Projekts gespeichert.
Hinweis
Die Schriftarten sollten über eine Buildaktion von AndroidResource verfügen, oder sie werden nicht in das endgültige APK verpackt. Die Buildaktion sollte von der IDE automatisch festgelegt werden.
Wenn es viele ähnliche Schriftartdateien gibt (z. B. dieselbe Schriftart mit unterschiedlichen Gewichten oder Formatvorlagen), ist es möglich, sie in eine Schriftartfamilie zu gruppieren.
Schriftfamilien
Eine Schriftfamilie ist eine Reihe von Schriftarten mit unterschiedlichen Gewichtungen und Formatvorlagen. Beispielsweise können separate Schriftartdateien für fett formatierte oder kursive Schriftarten vorhanden sein. Die Schriftfamilie wird durch font
Elemente in einer XML-Datei definiert, die im Verzeichnis "Ressourcen/Schriftart " gespeichert ist. Jede Schriftfamilie sollte über eine eigene XML-Datei verfügen.
Um eine Schriftartfamilie zu erstellen, fügen Sie zuerst alle Schriftarten zum Ordner "Ressourcen/Schriftart " hinzu. Erstellen Sie dann eine neue XML-Datei im Schriftartenordner für die Schriftartfamilie. Der Name der XML-Datei weist keine Affinität oder Beziehung zu den Schriftarten auf, auf die verwiesen wird; die Ressourcendatei kann ein beliebiger zulässiger Android-Ressourcendateiname sein. Diese XML-Datei enthält ein Stammelement font-family
, das mindestens ein font
Element enthält. Jedes font
Element deklariert die Attribute einer Schriftart.
Der folgende XML-Code ist ein Beispiel für eine Schriftartfamilie für die Schriftart Sources Sans Pro , die viele verschiedene Schriftbreiten definiert. Dies wird als Datei im Ordner "Ressourcen/Schriftart" mit dem Namen sourcesanspro.xml gespeichert:
<?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>
Das fontStyle
Attribut weist zwei mögliche Werte auf:
- normal – eine normale Schriftart
- kursiv – kursiv
Das fontWeight
Attribut entspricht dem CSS-Attribut font-weight
und verweist auf die Dicke der Schriftart. Dies ist ein Wert im Bereich von 100 bis 900. In der folgenden Liste werden die allgemeinen Werte für die Schriftbreite und deren Name beschrieben:
- Dünn – 100
- Zusätzliches Licht – 200
- Licht – 300
- Normal – 400
- Mittel – 500
- Semi fett – 600
- Fett – 700
- Extra fett – 800
- Schwarz – 900
Nachdem eine Schriftartfamilie definiert wurde, kann sie deklarativ verwendet werden, indem sie die fontFamily
Layoutdatei textStyle
und fontWeight
Attribute festlegen. Der folgende XML-Codeausschnitt legt beispielsweise eine Schriftart mit 600 Gewichtung (normal) und eine kursive Textformatvorlage fest:
<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"
/>
Programmgesteuertes Zuweisen von Schriftarten
Schriftarten können programmgesteuert mithilfe der Resources.GetFont
Methode zum Abrufen eines Typeface
Objekts festgelegt werden. Viele Ansichten verfügen über eine TypeFace
Eigenschaft, die verwendet werden kann, um die Schriftart dem Widget zuzuweisen. Dieser Codeausschnitt zeigt, wie Sie die Schriftart in einer TextView programmgesteuert festlegen:
Android.Graphics.Typeface typeface = this.Resources.GetFont(Resource.Font.caveat_regular);
textView1.Typeface = typeface;
textView1.Text = "Changed the font";
Die GetFont
Methode lädt automatisch die erste Schriftart in einer Schriftartfamilie. Verwenden Sie die Methode, um eine Schriftart zu laden, die Typeface.Create
einer bestimmten Formatvorlage entspricht. Diese Methode versucht, eine Schriftart zu laden, die der angegebenen Formatvorlage entspricht. In diesem Codeausschnitt wird beispielsweise versucht, ein fett formatiertes Typeface
Objekt aus einer Schriftartfamilie zu laden, die in Ressourcen/Schriftarten definiert ist:
var typeface = Typeface.Create("<FONT FAMILY NAME>", Android.Graphics.TypefaceStyle.Bold);
textView1.Typeface = typeface;
Herunterladen von Schriftarten
Statt Schriftarten als Anwendungsressource zu verpacken, kann Android Schriftarten aus einer Remotequelle herunterladen. Dies wird die wünschenswerte Wirkung haben, die Größe der APK zu verringern.
Schriftarten werden mit Unterstützung eines Schriftartanbieters heruntergeladen. Dies ist ein spezieller Inhaltsanbieter, der das Herunterladen und Zwischenspeichern von Schriftarten für alle Anwendungen auf dem Gerät verwaltet. Android 8.0 enthält einen Schriftartanbieter zum Herunterladen von Schriftarten aus dem Google Font Repository. Dieser Standardschriftartenanbieter wird mit der Android-Supportbibliothek v26 auf API-Ebene 14 zurückportiert.
Wenn eine App eine Anforderung für eine Schriftart sendet, überprüft der Schriftartanbieter zunächst, ob sich die Schriftart bereits auf dem Gerät befindet. Wenn dies nicht der Fehler ist, wird versucht, die Schriftart herunterzuladen. Wenn die Schriftart nicht heruntergeladen werden kann, verwendet Android die Standardschriftart des Systems. Sobald die Schriftart heruntergeladen wurde, ist sie für alle Anwendungen auf dem Gerät verfügbar, nicht nur für die App, die die ursprüngliche Anforderung gestellt hat.
Wenn eine Anforderung zum Herunterladen einer Schriftart gestellt wird, fragt die App nicht direkt den Schriftartanbieter ab. Stattdessen verwenden Apps eine Instanz der FontsContract
API (oder wenn FontsContractCompat
die Supportbibliothek 26 verwendet wird).
Android 8.0 unterstützt das Herunterladen von Schriftarten auf zwei verschiedene Arten:
- Deklarieren Sie herunterladbare Schriftarten als Ressource – Eine App kann herunterladbare Schriftarten über XML-Ressourcendateien auf Android deklarieren. Diese Dateien enthalten alle Metadaten, die Android benötigt, um die Schriftarten asynchron herunterzuladen, wenn die App gestartet und auf dem Gerät zwischengespeichert wird.
- Programmgesteuert – APIs in Android-API-Ebene 26 ermöglichen es einer Anwendung, die Schriftarten programmgesteuert herunterzuladen, während die Anwendung ausgeführt wird. Apps erstellen ein
FontRequest
Objekt für eine bestimmte Schriftart und übergeben dieses Objekt an dieFontsContract
Klasse. DieFontsContract
Schriftart wirdFontRequest
von einem Schriftartanbieter abgerufen und abgerufen. Android lädt die Schriftart synchron herunter. Ein Beispiel für das Erstellen einer DateiFontRequest
wird weiter unten in dieser Anleitung gezeigt.
Unabhängig davon, welcher Ansatz verwendet wird, müssen Ressourcendateien, die der Xamarin.Android-Anwendung hinzugefügt werden müssen, bevor Schriftarten heruntergeladen werden können. Zunächst müssen die Schriftarten in einer XML-Datei im Verzeichnis "Ressourcen/Schriftart " als Teil einer Schriftartfamilie deklariert werden. Dieser Codeausschnitt ist ein Beispiel für das Herunterladen von Schriftarten aus der Open Source-Sammlung von Google Fonts mithilfe des Standardschriftartenanbieters, der im Lieferumfang von Android 8.0 (oder der Supportbibliothek v26) enthalten ist:
<?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>
Das font-family
Element enthält die folgenden Attribute, wobei die Informationen deklariert werden, die Android zum Herunterladen der Schriftarten benötigt:
- fontProviderAuthority – Die Autorität des Schriftartanbieters, der für die Anforderung verwendet werden soll.
- fontPackage – Das Paket für den Schriftartanbieter, das für die Anforderung verwendet werden soll. Dies wird verwendet, um die Identität des Anbieters zu überprüfen.
- fontQuery – Dies ist eine Zeichenfolge, die dem Schriftartanbieter hilft, die angeforderte Schriftart zu finden. Details zur Schriftartabfrage sind spezifisch für den Schriftartanbieter. Die
QueryBuilder
Klasse in der Beispiel-App "Herunterladbare Schriftarten" enthält einige Informationen zum Abfrageformat für Schriftarten aus der Open Source-Sammlung von Google Fonts. - fontProviderCerts – Ein Ressourcenarray mit der Liste der Hashes für die Zertifikate, mit denen der Anbieter signiert werden soll.
Sobald die Schriftarten definiert sind, kann es erforderlich sein, Informationen zu den schriftartenzertifikaten bereitzustellen, die mit dem Download verbunden sind.
Schriftartzertifikate
Wenn der Schriftartanbieter nicht auf dem Gerät vorinstalliert ist oder die App die Xamarin.Android.Support.Compat
Bibliothek verwendet, erfordert Android die Sicherheitszertifikate des Schriftartanbieters. Diese Zertifikate werden in einer Arrayressourcendatei aufgeführt, die im Verzeichnis "Ressourcen/Werte " gespeichert ist.
Beispielsweise heißt der folgende XML-Code "Resources/values/fonts_cert.xml " und speichert die Zertifikate für den Google-Schriftartanbieter:
<?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>
Mit diesen Ressourcendateien kann die App die Schriftarten herunterladen.
Deklarieren von herunterladbaren Schriftarten als Ressourcen
Durch Die Auflistung der herunterladbaren Schriftarten im AndroidManifest.XML lädt Android die Schriftarten asynchron herunter, wenn die App zum ersten Mal gestartet wird. Die Schriftart selbst wird in einer Arrayressourcendatei aufgeführt, ähnlich der folgenden:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<array name="downloadable_fonts" translatable="false">
<item>@font/vt323</item>
</array>
</resources>
Um diese Schriftarten herunterzuladen, müssen sie in AndroidManifest.XML deklariert werden, indem sie als untergeordnetes Element des application
Elements hinzugefügt meta-data
werden. Wenn beispielsweise die herunterladbaren Schriftarten in einer Ressourcendatei unter Resources/values/downloadable_fonts.xml deklariert werden, müsste dieser Codeausschnitt dem Manifest hinzugefügt werden:
<meta-data android:name="downloadable_fonts" android:resource="@array/downloadable_fonts" />
Herunterladen einer Schriftart mit den Schriftart-APIs
Es ist möglich, eine Schriftart programmgesteuert herunterzuladen, indem ein FontRequest
Objekt instanziiert und an die FontContractCompat.RequestFont
Methode übergeben wird. Die FontContractCompat.RequestFont
Methode überprüft zunächst, ob die Schriftart auf dem Gerät vorhanden ist, und fragt dann bei Bedarf asynchron den Schriftartanbieter ab und versucht, die Schriftart für die App herunterzuladen. Wenn FontRequest
die Schriftart nicht heruntergeladen werden kann, verwendet Android die Standardschriftart des Systems.
Ein FontRequest
Objekt enthält Informationen, die vom Schriftartenanbieter verwendet werden, um eine Schriftart zu suchen und herunterzuladen. A FontRequest
erfordert vier Informationen:
- Font Provider Authority – Die Autorität des Schriftartanbieters, der für die Anforderung verwendet werden soll.
- Schriftartpaket – Das Paket für den Schriftartanbieter, das für die Anforderung verwendet werden soll. Dies wird verwendet, um die Identität des Anbieters zu überprüfen.
- Schriftartabfrage – Dies ist eine Zeichenfolge, mit der der Schriftartanbieter die angeforderte Schriftart finden kann. Details zur Schriftartabfrage sind spezifisch für den Schriftartanbieter. Die Details der Zeichenfolge sind spezifisch für den Schriftartanbieter. Die
QueryBuilder
Klasse in der Beispiel-App "Herunterladbare Schriftarten" enthält einige Informationen zum Abfrageformat für Schriftarten aus der Open Source-Sammlung von Google Fonts. - Schriftartanbieterzertifikate – Ein Ressourcenarray mit der Liste der Hashes für die Zertifikate, mit der der Anbieter signiert werden soll.
Dieser Codeausschnitt ist ein Beispiel für das Instanziieren eines neuen FontRequest
Objekts:
FontRequest request = new FontRequest("com.google.android.gms.fonts", "com.google.android.gms", <FontToDownload>, Resource.Array.com_google_android_gms_fonts_certs);
Im vorherigen Codeausschnitt FontToDownload
handelt es sich um eine Abfrage, die die Schriftart aus der Open Source-Sammlung von Google Fonts unterstützt.
Bevor Sie die FontRequest
FontContractCompat.RequestFont
Methode übergeben, müssen zwei Objekte erstellt werden:
FontsContractCompat.FontRequestCallback
– Dies ist eine abstrakte Klasse, die erweitert werden muss. Es handelt sich um einen Rückruf, der nach Abschluss des Vorgangs aufgerufenRequestFont
wird. Eine Xamarin.Android-App muss unterklassenFontsContractCompat.FontRequestCallback
und außer Kraft setzenOnTypefaceRequestFailed
OnTypefaceRetrieved
und die Aktionen bereitstellen, die ausgeführt werden sollen, wenn der Download fehlschlägt oder erfolgreich ist.Handler
– Dies wirdHandler
bei Bedarf verwendetRequestFont
, um die Schriftart auf einen Thread herunterzuladen. Schriftarten sollten nicht im UI-Thread heruntergeladen werden.
Dieser Codeausschnitt ist ein Beispiel für eine C#-Klasse, die asynchron eine Schriftart aus der Open Source-Auflistung von Google Fonts herunterladen wird. Sie implementiert die FontRequestCallback
Schnittstelle und löst nach FontRequest
Abschluss des Vorgangs ein C#-Ereignis aus.
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;
}
}
}
Um dieses Hilfsprogramm zu verwenden, wird eine neue FontDownloadHelper
erstellt, und ein Ereignishandler wird zugewiesen:
var fontHelper = new FontDownloadHelper();
fontHelper.FontDownloaded += (object sender, FontDownloadEventArg e) =>
{
//React to the request
};
fontHelper.DownloadFonts(this); // this is an Android Context instance.
Zusammenfassung
In diesem Leitfaden wurden die neuen APIs in Android 8.0 erläutert, um herunterladbare Schriftarten und Schriftarten als Ressourcen zu unterstützen. Es wurde erläutert, wie sie vorhandene Schriftarten in ein APK einbetten und in einem Layout verwenden. Außerdem wurde erläutert, wie Android 8.0 das Herunterladen von Schriftarten von einem Schriftartanbieter unterstützt, entweder programmgesteuert oder durch Deklarieren der Schriftartmetadaten in Ressourcendateien.