Gap Gap Top White Top Cheap Cheap vfR7q

This article describes how Xamarin.Forms lets you specify font attributes (including weight and size) on controls that display text. Font information can be specified in code or specified in XAML. It is also possible to use a custom font.

Setting Font in Code

Use the three font-related properties of any controls that display text:

  • FontFamily – the string font name.
  • FontSize – the font size as a double.
  • FontAttributes – a string specifying style information like Italic and Bold (using the FontAttributes enumeration in C#).

This code shows how to create a label and specify the font size and weight to display:

C#
var about = new Label {
    FontSize = Device.GetNamedSize (NamedSize.Medium, typeof(Label)),
    FontAttributes = FontAttributes.Bold,
    Text = "Medium Bold Font"
};

Font Size

The FontSize property can be set to a double value, for instance:

C#
label.FontSize = 24;

You can also use the NamedSize enumeration which has four built-in options; Xamarin.Forms chooses the best size for each platform.

The NamedSize enumeration can be used wherever a FontSize can be specified using the Device.GetNamedSize method to convert the value to a double:

C#
label.FontSize = Device.GetNamedSize(NamedSize.Small, Cheap Gap Top Gap Top Cheap White typeof(Label));

Font Attributes

Font styles such as bold and italic can be set on the FontAttributes property. The following values are currently supported:

  • None
  • Bold
  • Italic

The FontAttribute enumeration can be used as follows (you can specify a single attribute or OR them together):

C#
label.FontAttributes = FontAttributes.Bold | FontAttributes.Italic;

Setting Font Info Per Platform

Alternatively, the Device.RuntimePlatform property can be used to set different font names on each platform, as demonstrated in this code:

C#
label.FontFamily = Device.RuntimePlatform == Device.iOS ? "Lobster-Regular" :
   Device.RuntimePlatform == Device.Android ? "Lobster-Regular.ttf#Lobster-Regular" : "Assets/Fonts/Lobster-Regular.ttf#Lobster",
label.FontSize = Device.RuntimePlatform == Device.iOS ? 24 :
   Device.RuntimePlatform == Device.Android ? Device.GetNamedSize(NamedSize.Medium, label) : Device.GetNamedSize(NamedSize.Large, label);

A good source of font information for iOS is iosfonts.com.

Setting the Font in XAML

Xamarin.Forms controls that display text all have a Font property that can be set in XAML. The simplest way to set the font in XAML is to use the named size enumeration values, as shown in this example:

XAML
<Label Text="Login" FontSize="Large"/>
<LabelSplit Trousers Lavish Nude With Alice Front PqxYII7nv Text="Instructions" FontSize="Small"/>

There is a built-in converter for the Font property that allows all font settings to be expressed as a string value in XAML. The following examples show how you can specify font attributes and sizes in XAML:

XAML
<Label Text="Italics are supported" FontAttributes="Italic" />
<Label Text="Biggest NamedSize" FontSize="Large" />
<Label Text="Use size 72" FontSize="72" />

To specify multiple Font settings, combine the required settings into a single Font attribute string. The font attribute string should be formatted as "[font-face],[attributes],[size]". The order of the parameters is important, all parameters are optional, and multiple attributes can be specified, for example:

XAML
<Label Text="Small bold text" Font="Bold, Micro" />
<Label Text="Medium custom font" Font="MarkerFelt-Thin, 42" />
<Label Text="Really big bold and italic text" Font="Bold, Italic, 72" />

Device.RuntimePlatform can also be used in XAML to render a different font on each platform. The example below uses a custom font face on iOS (MarkerFelt-Thin) and specifies only size/attributes on the other platforms:

XAML
<Label Text="Hello Forms with XAML">
    <Label.FontFamily>
        <OnPlatform x:TypeArguments="x:String">
                <On Platform="iOS" Value="MarkerFelt-Thin" />
                <On Platform="Android" Value=White Top Top Cheap Cheap Gap Gap "Lobster-Regular.ttf#Lobster-Regular" />
                <On Platform="UWP" Value="Assets/Fonts/Lobster-Regular.ttf#Lobster" />
        OnPlatform>
    Label.FontFamily>
Label>

When specifying a custom font face, it is always a good idea to use OnPlatform, as it is difficult to find a font that is available on all platforms.

Using a Custom Font

Using a font other than the built-in typefaces requires some platform-specific coding. This screenshot shows the custom font Lobster from Google's open-source fonts rendered using Xamarin.Forms.

The steps required for each platform are outlined below. When including custom font files with an application, be sure to verify that the font's license allows for distribution.

iOS

It is possible to display a custom font by first ensuring that it is loaded, then referring to it by name using the Xamarin.Forms Font methods. Follow the instructions in this blog post:

  1. Add the font file with Build Action: BundleResource, and
  2. Update the Info.plist file (Fonts provided by application, or UIAppFonts, key), then
  3. Refer to it by name wherever you define a font in Xamarin.Forms!
C#
new Label
{
    Text = "Hello, Forms!",
    FontFamily = Device.RuntimePlatform == Device.iOS ? "Lobster-Regular" : null // set only for iOS
}

Android

Xamarin.Forms for Android can reference a custom font that has been added to the project by following a specific naming standard. First add the font file to the Assets folder in the application project and set Build Action: AndroidAsset. Then use the full path and Font Name separated by a hash (#) as the font name in Xamarin.Forms, as the code snippet below demonstrates:

C#
new Label
{
  Text = "Hello, Forms!",
  FontFamily = Device.RuntimePlatform == Device.Android ? "Lobster-Regular.ttf#Lobster-Regular" : null // set only for Android
}

Windows

Xamarin.Forms for Windows platforms can reference a custom font that has been added to the project by following a specific naming standard. First add the font file to the Cheap Top Gap Gap White Cheap Top /Assets/Fonts/ folder in the application project and set the Build Action:Content. Then use the full path and font filename, followed by a hash (#) and the Font Name, as the code snippet below demonstrates:

C#
new Label
{
    Text = "Hello, Forms!",
    FontFamily = Device.RuntimePlatform == Device.UWP ? "Assets/Fonts/Lobster-Regular.ttf#Lobster" : null // set only for UWP apps
}

Note

Note that the font file name and font name may be different. To discover the font name on Windows, right-click the .ttf file and select Preview. The font name can then be determined from the preview window.

The common code for the application is now complete. Platform-specific phone dialer code will now be implemented as a DependencyService.

XAML

You can also use Device.RuntimePlatform in XAML to render a custom font:

XAML
<Label Text="Hello Forms with XAML">
    <Label.FontFamily>
        <OnPlatform x:TypeArguments="x:String">
                <On Platform="iOS" Value="Lobster-Regular" />
                <On Platform="Android" Value="Lobster-Regular.ttf#Lobster-Regular" />
                <On Platform="UWP" Value="Assets/Fonts/Lobster-Regular.ttf#Lobster" />
        OnPlatform>
    Label.FontFamily>
Label>

Summary

Xamarin.Forms provides simple default settings to let you size text easily for all supported platforms. It also lets you specify font face and size – even differently for each platform – when more fine-grained control is required.

Font information can also be specified in XAML using correctly formatted font attributes.