Xamarin.forms 确保SkiaSharp字体和Xamarin表单默认字体匹配
我在Xamarin表单中使用SkiaSharp。我的目标是确保Xamarin控件中显示的字体(例如标签)与SkiaSharp绘图中使用的字体匹配 此外,我希望使用默认字体,以便应用程序在其各自的平台上看起来合适,并符合用户偏好 在我的简单应用程序中,我有一些Xamarin标签,还有一个由SkiaSharp绘制的自定义控件。虽然两者非常接近,但字体不同。SkiaSharep外观相同,但体积小约10%。Xamarin具有更宽的抗锯齿 见截图剪辑(顶部: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):
我想第三种选择是通过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
,并添加codetextPaint.Typeface=SKTypeface.FromFamilyName(“monospace”)代码>在OnCanvasViewPaintSurface
方法中。你可以检查一下它在你的项目中是否有效。好的,我相信你的话。那么,问题一定出在渲染中。也许是不同的抗锯齿算法。谢谢,谢谢。您所声称的是默认字体应该是相同的。在您的示例中,它们看起来是相同的。就我而言,即使我调整了大小,它们也不一样。@PeriHartman您好,它们是相同的Font
。从共享图像来看,它们的文本大小似乎不一样。但是Font
是一样的。如果为标签
(安卓系统字体之一)的FamilyFont
设置monospace
,并添加codetextPaint.Typeface=SKTypeface.FromFamilyName(“monospace”)代码>在OnCanvasViewPaintSurface
方法中。你可以检查一下它在你的项目中是否有效。好的,我相信你的话。那么,问题一定出在渲染中。也许是不同的抗锯齿算法。谢谢