You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Skia Sharp DrawText未适配Android辅助功能字体大小问题咨询

问题解答

这是预期行为吗?

是的,这属于预期行为。Android原生UI控件(如TextView)会自动监听系统辅助功能中的字体缩放设置,并应用对应的缩放比例;但SkiaSharp的DrawText方法是直接使用你传入的固定字号进行绘制,它本身不会主动读取系统的字体缩放配置,所以不会随系统字体大小变化自动缩放。

如何在SkiaSharp中适配Android字体大小变化?

你需要手动获取系统的字体缩放比例,然后将其应用到SkiaSharp绘制文本的字号上,具体步骤如下:

1. 获取系统字体缩放比例

在Android项目的Activity或Context中,通过Resources.Configuration获取当前字体缩放因子:

var scale = Resources.Configuration.FontScale;

这个scale值对应系统设置的字体缩放比例(默认值为1.0,大号/超大号设置会让该值大于1.0)。

2. 应用缩放比例到文本字号

调用DrawText时,将原始字号乘以缩放比例,得到适配后的字号:

// 原始基础字号
float originalSize = 16;
// 计算适配后的字号
float scaledSize = originalSize * scale;

// 使用SkiaSharp绘制适配后的文本
using (var paint = new SKPaint())
{
    paint.TextSize = scaledSize;
    paint.Color = SKColors.Black;
    canvas.DrawText("适配后的文本内容", xPosition, yPosition, paint);
}

3. 监听字体缩放变化(可选但推荐)

如果用户在App运行时修改系统字体大小,需要监听配置变化并触发重绘:

  • 在Activity的AndroidManifest.xml中添加配置变化声明:
<activity android:name=".YourTargetActivity"
          android:configChanges="fontScale|orientation|screenSize">
  • 重写Activity的OnConfigurationChanged方法,更新缩放比例并触发SkiaSharp视图重绘:
public override void OnConfigurationChanged(Configuration newConfig)
{
    base.OnConfigurationChanged(newConfig);
    // 更新缩放比例
    scale = newConfig.FontScale;
    // 触发SkiaSharp画布重绘
    yourSkiaSurfaceView.Invalidate();
}

完成以上操作后,SkiaSharp绘制的文本就会和原生控件同步,跟随Android辅助功能的字体大小设置进行缩放。

内容的提问来源于stack exchange,提问作者Saftpresse99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 00:50:44