Xamarin.forms 确保SkiaSharp字体和Xamarin表单默认字体匹配

Xamarin.forms 确保SkiaSharp字体和Xamarin表单默认字体匹配,xamarin.forms,fonts,skiasharp,Xamarin.forms,Fonts,Skiasharp,我在Xamarin表单中使用SkiaSharp。我的目标是确保Xamarin控件中显示的字体(例如标签)与SkiaSharp绘图中使用的字体匹配 此外,我希望使用默认字体,以便应用程序在其各自的平台上看起来合适,并符合用户偏好 在我的简单应用程序中,我有一些Xamarin标签,还有一个由SkiaSharp绘制的自定义控件。虽然两者非常接近,但字体不同。SkiaSharep外观相同,但体积小约10%。Xamarin具有更宽的抗锯齿 见截图剪辑(顶部:SkiaSharp,底部:Xamarin):

我在Xamarin表单中使用SkiaSharp。我的目标是确保Xamarin控件中显示的字体(例如标签)与SkiaSharp绘图中使用的字体匹配

此外,我希望使用默认字体,以便应用程序在其各自的平台上看起来合适,并符合用户偏好

在我的简单应用程序中,我有一些Xamarin标签,还有一个由SkiaSharp绘制的自定义控件。虽然两者非常接近,但字体不同。SkiaSharep外观相同,但体积小约10%。Xamarin具有更宽的抗锯齿

见截图剪辑(顶部:SkiaSharp,底部:Xamarin):

我不知道如何解决这个问题。至少有两种方法:

  • 如何确定用于Xamarin标签的字体?如果我能确定这一点,我应该能够设置为SkiaSharp绘图
  • 或者,如何将Xamarin字体设置为SkiaSharp使用的字体。我可以在运行时从SkiaSharep获取字体系列,但我不知道如何在运行时在Xamarin中设置它

  • 我想第三种选择是通过SkiaSharep处理所有字体。但是我将无法使用任何显示文本的Xamarin控件。

    通常,SkiaSharp使用默认的系统文本字体来绘制文本

    如果您可以将
    TextSize
    设置为适合默认的
    FontSize
    ,您将看到它们将显示相同的值

    请查看此屏幕截图:

    上面的是
    标签
    ,下面的是
    SKCanvasView
    中的Xaml

    <Label Text="Hello SkiaSharp!" x:Name="mylabel" VerticalOptions="Start" FontSize="Large" HorizontalOptions="CenterAndExpand" />
    <forms:SKCanvasView PaintSurface="OnCanvasViewPaintSurface" />
    

    通常,SkiaSharp使用默认的系统文本字体绘制文本

    如果您可以将
    TextSize
    设置为适合默认的
    FontSize
    ,您将看到它们将显示相同的值

    请查看此屏幕截图:

    上面的是
    标签
    ,下面的是
    SKCanvasView
    中的Xaml

    <Label Text="Hello SkiaSharp!" x:Name="mylabel" VerticalOptions="Start" FontSize="Large" HorizontalOptions="CenterAndExpand" />
    <forms:SKCanvasView PaintSurface="OnCanvasViewPaintSurface" />
    

    嗨,关于在运行时修改字体,你们可以看看,它可能会有帮助。我希望有一个Xamarin解决方案。该链接有一个针对Android的解决方案和一个针对iOS的单独解决方案。UWP没有解决方案(尽管我确信有一个)。此外,它们不是使用Xamarin表单编写的,可能使用完全不同的API。您好,关于运行时修改字体,您可以看看,这可能会有所帮助。我希望有一个Xamarin解决方案。该链接有一个针对Android的解决方案和一个针对iOS的单独解决方案。UWP没有解决方案(尽管我确信有一个)。此外,它们不是使用Xamarin表单编写的,可能使用完全不同的API。谢谢。您所声称的是默认字体应该是相同的。在您的示例中,它们看起来是相同的。就我而言,即使我调整了大小,它们也不一样。@PeriHartman您好,它们是相同的
    Font
    。从共享图像来看,它们的
    文本大小似乎不一样。但是
    Font
    是一样的。如果为
    标签
    (安卓系统字体之一)的
    FamilyFont
    设置
    monospace
    ,并添加code
    textPaint.Typeface=SKTypeface.FromFamilyName(“monospace”)
    OnCanvasViewPaintSurface
    方法中。你可以检查一下它在你的项目中是否有效。好的,我相信你的话。那么,问题一定出在渲染中。也许是不同的抗锯齿算法。谢谢,谢谢。您所声称的是默认字体应该是相同的。在您的示例中,它们看起来是相同的。就我而言,即使我调整了大小,它们也不一样。@PeriHartman您好,它们是相同的
    Font
    。从共享图像来看,它们的
    文本大小似乎不一样。但是
    Font
    是一样的。如果为
    标签
    (安卓系统字体之一)的
    FamilyFont
    设置
    monospace
    ,并添加code
    textPaint.Typeface=SKTypeface.FromFamilyName(“monospace”)
    OnCanvasViewPaintSurface
    方法中。你可以检查一下它在你的项目中是否有效。好的,我相信你的话。那么,问题一定出在渲染中。也许是不同的抗锯齿算法。谢谢