.NET MAUI 中的字体
默认情况下,.NET Multi-platform App UI (.NET MAUI) 应用在每个平台上都使用 Open Sans 字体。 但是,可以更改此默认设置,并且可以注册其他字体以在应用中使用。
所有显示文本的控件都定义了可设置为更改字体外观的属性:
string
类型的FontFamily
。FontAttributes
,类型为FontAttributes
,是具有三个成员None
、Bold
和Italic
的枚举。 此属性的默认值为None
。double
类型的FontSize
。FontAutoScalingEnabled
,类型为bool
,用于定义应用的 UI 是否反映操作系统中设置的文本缩放首选项。 此属性的默认值为true
。
这些属性由 BindableProperty 对象提供支持;也就是说,它们可以作为数据绑定的目标,并能进行样式设置。
所有显示文本的控件都会自动使用字体缩放,这意味着应用的 UI 会反映操作系统中设置的文本缩放首选项。
注册字体
True Type 格式 (TTF) 和 Open Type 字体 (OTF) 字体可以添加到你的应用中,并通过文件名或别名引用,而注册可以在 MauiProgram
类中的 CreateMauiApp
方法中执行。 这是通过调用 MauiAppBuilder
对象上的 ConfigureFonts
方法来完成的。 然后,在 IFontCollection
对象上,调用 AddFont
方法将所需字体添加到应用中:
namespace MyMauiApp
{
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureFonts(fonts =>
{
fonts.AddFont("Lobster-Regular.ttf", "Lobster");
});
return builder.Build();
}
}
}
在上面的示例中,AddFont
方法的第一个参数是字体文件名,而第二个参数表示一个可选别名,在使用字体时可以通过该别名引用字体。
通过将字体拖动到项目的 Resources\Fonts 文件夹中,可以将字体添加到应用项目中,其中其生成操作将自动设置为 MauiFont。 这将在项目文件中创建相应的条目。 也可以通过在项目文件中使用通配符来注册应用中的所有字体:
<ItemGroup>
<MauiFont Include="Resources\Fonts\*" />
</ItemGroup>
字体也可以添加到应用项目的其他文件夹中。 但是在这种情况下,必须在“属性”窗口中将其生成操作手动设置为“MauiFont”。
在生成时,字体将复制到应用包。 有关禁用字体打包的信息,请参阅禁用字体打包。
注意
*
通配符表示文件夹中的所有文件都将被视为字体文件。 此外,如果还希望包含子文件夹中的文件,请使用其他通配符对其进行配置,例如Resources\Fonts\**\*
。
使用字体
通过将显示文本的控件的 FontFamily
属性设置为不带文件扩展名的字体名称,可以使用已注册的字体:
<!-- Use font name -->
<Label Text="Hello .NET MAUI"
FontFamily="Lobster-Regular" />
也可以通过引用其别名来使用它:
<!-- Use font alias -->
<Label Text="Hello .NET MAUI"
FontFamily="Lobster" />
等效 C# 代码如下:
// Use font name
Label label1 = new Label
{
Text = "Hello .NET MAUI!",
FontFamily = "Lobster-Regular"
};
// Use font alias
Label label2 = new Label
{
Text = "Hello .NET MAUI!",
FontFamily = "Lobster"
};
在 Android 上,可以通过将以下系统字体设置为 FontFamily
属性的值来使用它们:
- 等宽字体
- 衬线字体
- sans-serif(或 sansserif)
- sans-serif-black(或 sansserif-black)
- sans-serif-condensed(或 sansserif-condensed)
- sans-serif-condensed-light(或 sansserif-condensed-light)
- sans-serif-light(或 sansserif-light)
- sans-serif-medium(或 sansserif-medium)
例如,等宽系统字体可以与以下 XAML 一起使用:
<Label Text="Hello .NET MAUI"
FontFamily="monospace" />
等效 C# 代码如下:
// Use font name
Label label1 = new Label
{
Text = "Hello .NET MAUI!",
FontFamily = "monospace"
};
设置字体特性
显示文本的控件可以设置 FontAttributes
属性来指定字体特性:
<Label Text="Italics"
FontAttributes="Italic" />
<Label Text="Bold and italics"
FontAttributes="Bold, Italic" />
等效 C# 代码如下:
Label label1 = new Label
{
Text = "Italics",
FontAttributes = FontAttributes.Italic
};
Label label2 = new Label
{
Text = "Bold and italics",
FontAttributes = FontAttributes.Bold | FontAttributes.Italic
};
设置字号
显示文本的控件可以设置 FontSize
属性以指定字号。 FontSize
属性可以设置为 double
值:
<Label Text="Font size 24"
FontSize="24" />
等效 C# 代码如下:
Label label = new Label
{
Text = "Font size 24",
FontSize = 24
};
注意
FontSize
值使用与设备无关的单位进行度量。
禁用字体自动缩放
显示文本的所有控件都默认启用字体缩放,这意味着应用的 UI 反映了操作系统中设置的文本缩放首选项。 但是,通过将基于文本的控件的 FontAutoScalingEnabled
属性设置为 false
可禁用此行为:
<Label Text="Scaling disabled"
FontSize="18"
FontAutoScalingEnabled="False" />
如果要保证文本以特定大小显示,此方法非常有用。
注意
字体自动缩放也适用于字体图标。 有关详细信息,请参阅显示字体图标。
为每个平台设置字体属性
在 XAML 中可以使用 OnPlatform
和 On
类来设置每个平台的字体属性。 以下示例设置不同的字体系列和大小:
<Label Text="Different font properties on different platforms"
FontSize="{OnPlatform iOS=20, Android=22, WinUI=24}">
<Label.FontFamily>
<OnPlatform x:TypeArguments="x:String">
<On Platform="iOS" Value="MarkerFelt-Thin" />
<On Platform="Android" Value="Lobster-Regular" />
<On Platform="WinUI" Value="ArimaMadurai-Black" />
</OnPlatform>
</Label.FontFamily>
</Label>
在代码中可以使用 DeviceInfo.Platform
属性设置每个平台的字体属性:
Label label = new Label
{
Text = "Different font properties on different platforms"
};
label.FontSize = DeviceInfo.Platform == DevicePlatform.iOS ? 20 :
DeviceInfo.Platform == DevicePlatform.Android ? 22 : 24;
label.FontFamily = DeviceInfo.Platform == DevicePlatform.iOS ? "MarkerFelt-Thin" :
DeviceInfo.Platform == DevicePlatform.Android ? "Lobster-Regular" : "ArimaMadurai-Black";
有关提供特定于平台的值的详细信息,请参阅设备信息。 有关 OnPlatform
标记扩展的信息,请参阅基于平台自定义 UI 外观。
显示字体图标
通过在 FontImageSource 对象中指定字体图标数据,.NET MAUI 应用可以显示字体图标。 此类派生自 ImageSource 类,具有以下属性:
Glyph
– 字体图标的 Unicode 字符值,指定为string
。Size
– 以与设备无关的单位表示呈现的字体图标大小的double
值。 默认值为 30。 此外,此属性可以设置为命名字体大小。FontFamily
– 表示字体图标所属的字体系列的string
。Color
– 显示字体图标时要使用的可选 Color 值。
此数据用于创建 PNG,可由任何可显示 ImageSource 的视图显示。 此方法允许多个视图显示字体图标(如表情符号),而不是将字体图标显示限制为单个文本呈现视图,例如 Label。
重要
字体图标当前只能由其 Unicode 字符表示形式指定。
以下 XAML 示例具有 Image 视图显示的单个字体图标:
<Image BackgroundColor="#D1D1D1">
<Image.Source>
<FontImageSource Glyph=""
FontFamily="{OnPlatform iOS=Ionicons, Android=ionicons.ttf#}"
Size="44" />
</Image.Source>
</Image>
此代码在 Image 视图中显示 Ionicons 字体系列中的 XBox 图标。 请注意,虽然此图标的 Unicode 字符是 \uf30c
,但它必须在 XAML 中转义,因此变为 
。 等效 C# 代码如下:
Image image = new Image { BackgroundColor = Color.FromArgb("#D1D1D1") };
image.Source = new FontImageSource
{
Glyph = "\uf30c",
FontFamily = DeviceInfo.Platform == DevicePlatform.iOS ? "Ionicons" : "ionicons.ttf#",
Size = 44
};
以下屏幕截图所示为显示的多个字体图标: