Teilen über


Schriftarten in Xamarin.Forms

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

  • FontAttributes vom Typ FontAttributes, eine Enumeration mit 3 Zahlen, None, Bold und Italic. Der Standardwert dieser Eigenschaft ist None.
  • FontSize vom Typ double.
  • FontFamily vom Typ string.

Diese Eigenschaften werden von BindableProperty-Objekten unterstützt, was bedeutet, dass sie Ziele von Datenbindungen sein können und formatiert werden können.

Schriftartattribute

Steuerelemente, die Text anzeigen, können die FontAttributes-Eigenschaft so festlegen, dass Schriftartattribute angegeben werden:

<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
};    

Schriftgrad zurücksetzen

Steuerelemente, die Text anzeigen, können die FontSize-Eigenschaft so festlegen, dass der Schriftgrad angegeben wird. Die FontSize Eigenschaft kann direkt auf einen double Wert oder durch einen NamedSize Enumerationswert 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 Außerkraftsetzung, die das zweite Argument als :Element

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

Hinweis

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

Weitere Informationen zu benannten Schriftgraden finden Sie unter Grundlegendes zu benannten Schriftgraden.

Festlegen der Schriftfamilie

Steuerelemente, die Text anzeigen, können die FontFamily Eigenschaft auf einen Schriftartfamiliennamen festlegen, z. B. "Times Roman". Dies funktioniert jedoch nur, wenn diese Schriftartfamilie 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 Schriftartfamilie, 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 plattformversion ändern. Daher ist der zuverlässigste Ansatz für die Angabe einer Schriftartfamilie die Verwendung einer benutzerdefinierten Schriftart.

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

  1. Fügen Sie die Schriftart zu Ihrem Xamarin.Forms freigegebenen Projekt als eingebettete Ressource hinzu (Buildaktion: EmbeddedResource).
  2. Registrieren Sie die Schriftartdatei mit der Assembly in einer Datei wie AssemblyInfo.cs mithilfe des ExportFont Attributs. Ein optionaler Alias kann auch angegeben werden.

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

using Xamarin.Forms;

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

Hinweis

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

Unter Windows kann der Name der Schriftartdatei und der Schriftartname unterschiedlich sein. Um den Schriftartnamen 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 aus dem Vorschaufenster bestimmt werden.

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

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

Alternativ kann es auf jeder Plattform genutzt werden, indem er auf seinen Alias verweist:

<!-- 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:

Benutzerdefinierte Schriftart unter iOS und Android

Wichtig

Stellen Sie für Releasebuilds unter Windows sicher, dass die Assembly mit der benutzerdefinierten Schriftart als Argument im Forms.Init Methodenaufruf übergeben wird. Weitere Informationen finden Sie unter Problembehandlung.

Festlegen von Schriftarteigenschaften pro Plattform

Die OnPlatform- und On-Klassen können in XAML verwendet werden, um Schrifteigenschaften pro Plattform festzulegen. Im folgenden Beispiel werden auf jeder Plattform unterschiedliche Schriftfamilien und Schriftgrade 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 zum Festlegen von Schriftarteigenschaften pro Plattform verwendet werden.

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 NamedSize Aufzählung, die bestimmte Schriftgrade darstellen. Die folgende Tabelle zeigt die NamedSize Member und deren Standardgrößen unter iOS, Android und dem Universelle Windows-Plattform (UWP):

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 Schriftgrade basierend auf den Barrierefreiheitsoptionen des Betriebssystems automatisch skalieren. Dieses Verhalten kann unter iOS mit einer plattformspezifischen Funktion deaktiviert werden. Weitere Informationen finden Sie unter Barrierefreiheitsskalierung für benannte Schriftgrade unter iOS.

Anzeigen von Schriftartsymbolen

Schriftartsymbole können von Xamarin.Forms Anwendungen angezeigt werden, indem sie die Schriftartsymboldaten in einem FontImageSource Objekt angeben. Diese Klasse, die sich von der Klasse ImageSource ableitet, hat die folgenden Eigenschaften:

  • Glyph – der Unicode-Zeichenwert des Schriftartsymbols, angegeben als ein 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 – eine string-Darstellung der Schriftfamilie, zu der das Schriftartsymbol gehört.
  • Color – ein optionaler Color-Wert, der beim Anzeigen des Schriftartsymbols verwendet werden soll.

Die Schriftartdaten können von jeder Ansicht angezeigt werden, die eine ImageSource. Auf diese Weise können Schriftsymbole, wie z. B. Emojis, in mehreren Ansichten angezeigt werden, im Gegensatz zur Beschränkung der Anzeige von Schriftsymbolen auf eine einzige Textdarstellungsansicht, wie z. B. Label.

Wichtig

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

Das folgende XAML-Beispiel weist ein einzelnes Schriftartsymbol auf, das von einer Image-Ansicht angezeigt wird:

<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 Schriftfamilie Ionicons in einer Image-Ansicht an. Beachten Sie, dass das Unicode-Zeichen für dieses Symbol zwar \uf30c lautet, in XAML aber in &#xf30c; umgewandelt werden muss. 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 zeigen mehrere Schriftartsymbole, die durch ein bindungsfähiges Layout angezeigt werden:

Screenshot der angezeigten Schriftartsymbole unter iOS und Android