uni-app weex中nvue原生编译模式下gcanvas属性绘画图片时安卓fillText中文不显示(IOS正常)英文数字正常

uni-app weex中nvue原生编译模式下gcanvas属性绘画图片时安卓fillText中文不显示(IOS正常)英文数字正常

开发环境 版本号 项目创建方式
Windows windiws 11
HBuilderX 3.4.11 HBuilderX

示例代码:

ctx.fillText(‘画文字’, 110, 40)


### 操作步骤:

ctx.fillText('画文字', 110, 40)

预期结果:

ctx.fillText(‘画文字’, 110, 40)


### 实际结果:

ctx.fillText('画文字', 110, 40)

bug描述:

weex中nvue下且是原生编译模式,它里面有个gcanvas属性,但我在绘画图片时,安卓的 fillText 中文不起显示(IOS的中文显示),英文数字正常。

3 回复

提供可以复现demo,方便排查


大哥 这问题解决了嘛

uni-appnvue 原生编译模式下,使用 gcanvas 绘制图片时,如果遇到 fillText 在 Android 上无法显示中文(但 iOS 正常,英文和数字正常)的问题,可能是由于以下原因导致的:

1. 字体问题

Android 系统默认可能不支持某些中文字体,或者字体文件未正确加载。你可以尝试指定一个支持中文的字体文件。

2. 字体加载问题

确保字体文件已经正确加载。你可以通过 gcanvasloadFont 方法加载字体文件。

3. 字体名称问题

fillText 中指定的字体名称可能与实际字体文件名称不一致,导致无法正确渲染。

解决方案

1. 指定支持中文的字体

你可以使用 gcanvasloadFont 方法加载一个支持中文的字体文件,然后在 fillText 中指定该字体。

const gcanvas = require('gcanvas');

// 加载字体文件
gcanvas.loadFont({
  fontFamily: 'myFont', // 自定义字体名称
  src: '/static/fonts/myFont.ttf', // 字体文件路径
}).then(() => {
  // 字体加载成功后绘制文本
  const ctx = gcanvas.getContext('2d');
  ctx.font = '30px myFont'; // 使用加载的字体
  ctx.fillText('你好,世界', 50, 50);
}).catch(err => {
  console.error('字体加载失败', err);
});

2. 使用系统默认支持中文的字体

如果你不想加载自定义字体,可以尝试使用 Android 系统默认支持中文的字体,例如 sans-serifserif

const ctx = gcanvas.getContext('2d');
ctx.font = '30px sans-serif'; // 使用系统默认字体
ctx.fillText('你好,世界', 50, 50);
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!