Schriftarten in Xamarin.Forms

Beispiel herunterladen Das Beispiel herunterladen

Verwendet standardmäßig eine Systemschriftart, Xamarin.Forms die von jeder Plattform definiert wird. Steuerelemente, die Text anzeigen, definieren jedoch Eigenschaften, die Sie zum Ändern dieser Schriftart verwenden können:

  • FontAttributesvom Typ FontAttributes, bei dem es sich um eine Enumeration mit drei Membern handelt: None, Boldund Italic. Der Standardwert dieser Eigenschaft ist None.
  • FontSize vom Typ double.
  • FontFamily vom Typ string.

Diese Eigenschaften werden durch BindableProperty-Objekte gestützt, was bedeutet, dass sie Ziele von Datenbindungen sein können, und geformt.

Festlegen von Schriftartattributen

Steuerelemente, die Text anzeigen, können die FontAttributes -Eigenschaft festlegen, um Schriftartattribute anzugeben:

<Label Text="Italics"
       FontAttributes="Italic" />
<Label Text="Bold and italics"
       FontAttributes="Bold, Italic" />

Der entsprechende C#-Code lautet:

Label label1 = new Label
{
    Text = "Italics",
    FontAttributes = FontAttributes.Italic
};

Label label2 = new Label
{
    Text = "Bold and italics",
    FontAttributes = FontAttributes.Bold | FontAttributes.Italic
};    

Festlegen des Schriftgrads

Steuerelemente, die Text anzeigen, können die FontSize -Eigenschaft festlegen, um den Schriftgrad anzugeben. Die FontSize -Eigenschaft kann direkt oder durch einen Enumerationswert auf einen doubleNamedSize Wert festgelegt werden:

<Label Text="Font size 24"
       FontSize="24" />
<Label Text="Large font size"
       FontSize="Large" />

Der entsprechende C#-Code lautet:

Label label1 = new Label
{
    Text = "Font size 24",
    FontSize = 24
};

Label label2 = new Label
{
    Text = "Large font size",
    FontSize = Device.GetNamedSize(NamedSize.Large, typeof(Label))
};

Alternativ verfügt die Device.GetNamedSize -Methode über eine Überschreibung, die das zweite Argument als Elementangibt:

Label myLabel = new Label
{
    Text = "Large font size",
};
myLabel.FontSize = Device.GetNamedSize(NamedSize.Large, myLabel);

Hinweis

Der FontSize Wert, wenn er als doubleangegeben wird, wird in geräteunabhängigen Einheiten gemessen. Weitere Informationen finden Sie unter Maßeinheiten.

Weitere Informationen zu benannten Schriftgrößen finden Sie unter Grundlegendes zu benannten Schriftgraden.

Festlegen der Schriftfamilie

Steuerelemente, die Text anzeigen, können die FontFamily Eigenschaft auf einen Schriftartenfamiliennamen festlegen, z. B. "Times Roman". Dies funktioniert jedoch nur, wenn diese Schriftfamilie auf der jeweiligen Plattform unterstützt wird.

Es gibt eine Reihe von Techniken, mit denen versucht werden kann, die auf einer Plattform verfügbaren Schriftarten abzuleiten. Das Vorhandensein einer TTF-Schriftartdatei (True Type Format) impliziert jedoch nicht unbedingt eine Schriftartenfamilie, und TTFs sind häufig enthalten, die nicht für die Verwendung in Anwendungen vorgesehen sind. Darüber hinaus können sich die auf einer Plattform installierten Schriftarten mit der Plattformversion ändern. Daher ist die Verwendung einer benutzerdefinierten Schriftart der zuverlässigste Ansatz für die Angabe einer Schriftartfamilie.

Benutzerdefinierte Schriftarten können Ihrem Xamarin.Forms freigegebenen Projekt hinzugefügt und von Plattformprojekten ohne zusätzlichen Aufwand genutzt werden. Die Vorgehensweise hierfür ist wie folgt:

  1. Fügen Sie die Schriftart ihrem Xamarin.Forms freigegebenen Projekt als eingebettete Ressource hinzu (Buildaktion: EmbeddedResource).
  2. Registrieren Sie die Schriftartdatei bei der Assembly in einer Datei wie AssemblyInfo.cs mit dem ExportFont -Attribut. Es kann auch ein optionaler Alias angegeben werden.

Das folgende Beispiel zeigt die Lobster-Regular Schriftart, die bei der Assembly registriert wird, zusammen mit einem Alias:

using Xamarin.Forms;

[assembly: ExportFont("Lobster-Regular.ttf", Alias = "Lobster")]

Hinweis

Die Schriftart kann sich in einem beliebigen Ordner im freigegebenen Projekt befinden, ohne den Ordnernamen beim Registrieren der Schriftart bei der Assembly angeben zu müssen.

Unter Windows können sich der Datei- und Der Schriftartname unterscheiden. Um den Schriftnamen unter Windows zu ermitteln, klicken Sie mit der rechten Maustaste auf die TTF-Datei, und wählen Sie Vorschau aus. Der Name der Schriftart kann dann im Vorschaufenster ermittelt werden.

Die Schriftart kann dann auf jeder Plattform verwendet werden, indem auf ihren Namen verwiesen wird, ohne die Dateierweiterung:

<!-- Use font name -->
<Label Text="Hello Xamarin.Forms"
       FontFamily="Lobster-Regular" />

Alternativ kann es auf jeder Plattform verwendet werden, indem auf seinen Alias verwiesen wird:

<!-- Use font alias -->
<Label Text="Hello Xamarin.Forms"
       FontFamily="Lobster" />

Der entsprechende C#-Code lautet:

// Use font name
Label label1 = new Label
{
    Text = "Hello Xamarin.Forms!",
    FontFamily = "Lobster-Regular"
};

// Use font alias
Label label2 = new Label
{
    Text = "Hello Xamarin.Forms!",
    FontFamily = "Lobster"
};

Die folgenden Screenshots zeigen die benutzerdefinierte Schriftart:

unter benutzerdefinierten Schriftarten unter iOS und Android

Wichtig

Stellen Sie bei Releasebuilds unter Windows sicher, dass die Assembly, die die benutzerdefinierte Schriftart enthält, im Forms.Init Methodenaufruf als Argument übergeben wird. Weitere Informationen finden Sie unter Problembehandlung.

Festlegen von Schriftarteigenschaften pro Plattform

Die OnPlatform Klassen und On können in XAML verwendet werden, um Schriftarteigenschaften pro Plattform festzulegen. Im folgenden Beispiel werden auf jeder Plattform unterschiedliche Schriftfamilien und -größen festgelegt:

<Label Text="Different font properties on different platforms"
       FontSize="{OnPlatform iOS=20, Android=Medium, UWP=24}">
    <Label.FontFamily>
        <OnPlatform x:TypeArguments="x:String">
            <On Platform="iOS" Value="MarkerFelt-Thin" />
            <On Platform="Android" Value="Lobster-Regular" />
            <On Platform="UWP" Value="ArimaMadurai-Black" />
        </OnPlatform>
    </Label.FontFamily>
</Label>

Die Device.RuntimePlatform -Eigenschaft kann im Code verwendet werden, um Schriftarteigenschaften pro Plattform festzulegen.

Label label = new Label
{
    Text = "Different font properties on different platforms"
};

label.FontSize = Device.RuntimePlatform == Device.iOS ? 20 :
    Device.RuntimePlatform == Device.Android ? Device.GetNamedSize(NamedSize.Medium, label) : 24;
label.FontFamily = Device.RuntimePlatform == Device.iOS ? "MarkerFelt-Thin" :
   Device.RuntimePlatform == Device.Android ? "Lobster-Regular" : "ArimaMadurai-Black";

Weitere Informationen zum Bereitstellen plattformspezifischer Werte finden Sie unter Bereitstellen plattformspezifischer Werte. Informationen zur OnPlatform Markuperweiterung finden Sie unter OnPlatform-Markuperweiterung.

Grundlegendes zu benannten Schriftgraden

Xamarin.Forms definiert Felder in der -Enumeration, die NamedSize bestimmte Schriftgrößen darstellen. In der folgenden Tabelle sind die NamedSize Member und ihre Standardgrößen unter iOS, Android und der Universelle Windows-Plattform (UWP) aufgeführt:

Member iOS Android UWP
Default 17 14 14
Micro 12 10 15.667
Small 14 14 18.667
Medium 17 17 22.667
Large 22 22 32
Body 17 16 14
Header 17 14 46
Title 28 24 24
Subtitle 22 16 20
Caption 12 12 12

Die Größenwerte werden in geräteunabhängigen Einheiten gemessen. Weitere Informationen finden Sie unter Maßeinheiten.

Hinweis

Unter iOS und Android werden benannte Schriftgrößen basierend auf den Barrierefreiheitsoptionen des Betriebssystems automatisch skaliert. Dieses Verhalten kann unter iOS mit einem plattformspezifischen deaktiviert werden. Weitere Informationen finden Sie unter Skalierung der Barrierefreiheit für benannte Schriftgrößen unter iOS.

Anzeigen von Schriftartsymbolen

Schriftartsymbole können von Xamarin.Forms Anwendungen angezeigt werden, indem die Daten des Schriftartsymbols in einem FontImageSource -Objekt angegeben werden. Diese Klasse, die von der ImageSource -Klasse abgeleitet wird, verfügt über die folgenden Eigenschaften:

  • Glyph – Der Unicode-Zeichenwert des Schriftartsymbols, angegeben als string.
  • Size – Ein double Wert, der die Größe des gerenderten Schriftartsymbols in geräteunabhängigen Einheiten angibt. Der Standardwert ist 30. Darüber hinaus kann diese Eigenschaft auf einen benannten Schriftgrad festgelegt werden.
  • FontFamily – ein string , der die Schriftfamilie darstellt, zu der das Schriftartensymbol gehört.
  • Color – ein optionaler Color Wert, der beim Anzeigen des Schriftartensymbols verwendet werden soll.

Die Schriftartdaten können von jeder Ansicht angezeigt werden, die eine ImageSourceanzeigen kann. Bei diesem Ansatz können Schriftartensymbole, z. B. Emojis, von mehreren Ansichten angezeigt werden, anstatt die Anzeige von Schriftartensymbolen auf eine einzelne Textdarstellungsansicht zu beschränken, z. B. eine Label.

Wichtig

Schriftartsymbole können derzeit nur durch ihre Unicode-Zeichendarstellung angegeben werden.

Im folgenden XAML-Beispiel wird ein einzelnes Schriftartensymbol von einer Image Ansicht angezeigt:

<Image BackgroundColor="#D1D1D1">
    <Image.Source>
        <FontImageSource Glyph="&#xf30c;"
                         FontFamily="{OnPlatform iOS=Ionicons, Android=ionicons.ttf#}"
                         Size="44" />
    </Image.Source>
</Image>

Dieser Code zeigt ein XBox-Symbol aus der Ionicons-Schriftfamilie in einer Image Ansicht an. Beachten Sie, dass das Unicode-Zeichen für dieses Symbol zwar ist \uf30c, es jedoch in XAML mit Escapezeichen versehen werden muss und somit zu wird &#xf30c;. Der entsprechende C#-Code lautet:

Image image = new Image { BackgroundColor = Color.FromHex("#D1D1D1") };
image.Source = new FontImageSource
{
    Glyph = "\uf30c",
    FontFamily = Device.RuntimePlatform == Device.iOS ? "Ionicons" : "ionicons.ttf#",
    Size = 44
};

Die folgenden Screenshots aus dem Beispiel bindbare Layouts zeigen mehrere Schriftartsymbole, die von einem bindbaren Layout angezeigt werden:

Screenshot: Angezeigte Schriftartsymbole unter iOS- und