我有一个 MAUI 项目,我正在尝试在我的应用程序中添加自定义字体。当我在 Windows 计算机上运行它时它可以工作,但从模拟器运行它时它不会应用字体。 有人知道原因吗? 谢谢
我的自定义字体已添加到资源 -> 字体
我已经在 MauiProgram 类中声明了它
为我的自定义字体设置属性
当它在 Windows 机器上运行时它是正确的
当它在 Android 模拟器上运行时,它不会被应用
我也尝试使用其他字体,结果又发生了!
我无法在我的项目中重现您的问题。
我的程序代码.cs:
builder
.UseMauiApp<App>()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
fonts.AddFont("Conquest-8MxyM.ttf", "MyFont");
})
还有 ttf 文件:
使用xaml中的字体:
<Label
Text="Hello, World!"
SemanticProperties.HeadingLevel="Level1"
FontSize="32"
HorizontalOptions="Center"
FontFamily="MyFont"/>
Android模拟器中的结果图像:
我更改了代码,现在它可以工作了:
<Label Text="Hello World!"
FontSize="{OnPlatform iOS=20, Android=22, WinUI=50}">
<Label.FontFamily>
<OnPlatform x:TypeArguments="x:String">
<On Platform="iOS" Value="OpenSans-Regular" />
<On Platform="Android" Value="DUEL" />
<On Platform="WinUI" Value="OpenSansSemibold" />
</OnPlatform>
</Label.FontFamily>
</Label>
这个问题帮助了我:
在 .NET MAUI 中使用粗体和斜体以外的 FontAttributes
和白光宇 - MSFT回答这个问题
在Android-Maui中使用字体时,字体的Add方法需要指定清晰的路径。因此,我使用以下代码来实现此目的。首先,属性将 MauiFont 中的字体设置为嵌入资源,然后手动将字体提取到特定文件路径,然后添加此特定文件路径。
using (var resource = Assembly.GetExecutingAssembly().GetManifestResourceStream("RawMaterial.Resources.Fonts.simhei.ttf"))
{
var ReadByte = new byte[resource.Length];
resource.Read(ReadByte, 0, (int)resource.Length);
File.WriteAllBytes(Path.Combine(FileSystem.CacheDirectory, "simhei.ttf"), ReadByte);
}
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.UseSkiaSharp()
.UseXceedMauiToolkit()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
fonts.AddFont(Path.Combine(FileSystem.CacheDirectory, "simhei.ttf"), "simhei");
});