设置环境变量的方式只支持 ttf 格式的字体
以下是通过go-findfont 库 查询本地的simkai.ttf 进行环境变量的设置 (环境变量的key 设置为 FYNE_FONT)
可以直接复制以下代码 实现支持中文 (记得下载类库)
package main
import (
"fmt"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/widget"
"github.com/flopp/go-findfont"
"os"
"strings"
)
// 方式一 设置环境变量 通过go-findfont 寻找simkai.ttf 字体
func init() {
fontPaths := findfont.List()
for _, path := range fontPaths {
//fmt.Println(path)
//楷体:simkai.ttf
//黑体:simhei.ttf
if strings.Contains(path, "simkai.ttf") {
fmt.Println(path)
os.Setenv("FYNE_FONT", path) // 设置环境变量 // 取消环境变量 os.Unsetenv("FYNE_FONT")
break
}
}
fmt.Println("=============")
}
func main() {
MyApp := app.New()
c := MyApp.NewWindow("解决fyne支持中文")
labels := widget.NewLabel("支持中文")
c.SetContent(labels)
c.Resize(fyne.NewSize(600, 600))
c.ShowAndRun()
}
2. 通过字体打包成二进制方式
① 安装官方的cmd工具
go get fyne.io/fyne/cmd/fyne
② 准备好字体 一般是simkai.ttf (最好使用ttf字体格式)
③ 将字体文件转为go 文件
fyne bundle simkai.ttf > bundle.go
④ 需要创建一个 theme文件夹 把bundle.go放入其中 同事修改 bundle.go中的 引入的 fyne是1.0版本的 你需要修改到v2版本和 包名
⑤在theme文件夹里面 创建一个 theme.go return的resourceSimkaiTtf 要和 bundle.go var定义的变量名相同
package theme
import (
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/theme"
"image/color"
)
type MyTheme struct{}
var _ fyne.Theme = (*MyTheme)(nil)
// return bundled font resource
// ResourceSourceHanSansTtf 即是 bundle.go 文件中 var 的变量名
func (m MyTheme) Font(s fyne.TextStyle) fyne.Resource {
return resourceSimkaiTtf
}
func (*MyTheme) Color(n fyne.ThemeColorName, v fyne.ThemeVariant) color.Color {
return theme.DefaultTheme().Color(n, v)
}
func (*MyTheme) Icon(n fyne.ThemeIconName) fyne.Resource {
return theme.DefaultTheme().Icon(n)
}
func (*MyTheme) Size(n fyne.ThemeSizeName) float32 {
return theme.DefaultTheme().Size(n)
}
⑥ 在主入口文件引入 theme 主题就行
package main
import (
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/widget"
"fyne/9-3/theme"
)
func main() {
MyApp := app.New()
MyApp.Settings().SetTheme(&theme.MyTheme{}) // 设置主题
c := MyApp.NewWindow("解决fyne支持中文")
labels := widget.NewLabel("支持中文")
c.SetContent(labels)
c.Resize(fyne.NewSize(600, 600))
c.ShowAndRun()
}