首页 文章

Xamarin表单上的SkiaSharp文本大小

提问于
浏览
2

Text Size Comparison

SKPaint对象上的TextSize属性如何与“标准”Xamarin Forms FontSize相关联?

在图像中,您可以看到标签上的尺寸40与涂漆之间的差异 . 我需要做些什么来使它们大小相同?

2 回答

  • 4

    正如@hankide所提到的,它与本机操作系统具有UI元素缩放的事实有关,因此应用程序在不同设备上“看起来大小相同” .

    这对于按钮以及操作系统绘制它们时的所有功能非常有用 . 因此,如果按钮更大,操作系统只会放大文本 . 但是,使用SkiaSharp,我们不知道您在绘制什么,因此我们无法进行任何缩放 . 如果我们要缩放,图像将在高分辨率屏幕上变得模糊或像素化 .

    获得所有相同尺寸的一种方法是在绘制任何东西之前进行全局缩放:

    var scale = canvasWidth / viewWidth;
    canvas.Scale(scale);
    

    这通常足够好,但有时你真的想在高分辨率屏幕上以不同的方式绘制项目 . 一个例子是平铺背景 . 您可能只想平铺它 - 而不是在更大的画布上拉伸图像 - 保留像素 .

    对于此问题,您可以在绘制之前缩放整个画布,也可以缩放文本:

    var paint = new SKPaint {
        TextSize = 40 * scale
    };
    

    这样,文本大小会增加,但绘图的其余部分会在更大的画布上 .

    我在GitHub上有一个例子:https://github.com/mattleibow/SkiaSharpXamarinFormsDemo

    这比较了Xamarin.Forms,SkiaSharp和Native标签 . (它们应该都是完全相同的大小)

  • 0

    我认为问题在于Xamarin.Forms处理字体大小的方式 . 例如,在Android上,您可以定义字体大小(以像素为单位)(px),与比例无关的像素(sp),英寸(in),毫米和与密度无关的像素(dp / dip) .

    我不记得Xamarin.Forms如何处理大小(px,sp或dp)但你看到的区别是因为这个 . 你可以做的是创建一个效果,改变原生控件上的字体大小处理,并尝试匹配SkiaSharp提供的大小 .

相关问题