(摘) Fyne: 使用中文并打包进二进制文件

声明:内容源自网络,版权归原作者所有。若有侵权请在网页聊天中联系我

1. fyne官方工具

go get fyne.io/fyne/cmd/fyne

2. 将字体转换为go文件

fyne bundle Alibaba-PuHuiTi-Medium.ttf > bundle.go

3. 创建自定义theme

也就是自定义样式

// theme.go
package main

import (
    "fyne.io/fyne/v2"
    "fyne.io/fyne/v2/theme"

    "image/color"
)

type MyTheme struct{}

func (m MyTheme) Font(s fyne.TextStyle) fyne.Resource {
    return ResourceSourceHanSansTtf
}
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)
}

而我并没有单独做一个包,依然放到main下,即 package main

这里的 ResourceSourceHanSansTtf即是 bundle.go 文件中 var 的变量名,根据你的字体不同,变量名是不同的。

4. 引用

app.Settings().SetTheme(&MyTheme{}) // 引用自已定义的样式

题外

如果你的程序是在Win中运行,可能查询Win自有的中文字体使用会更简单,尺寸更小。

"golang.org/x/sys/windows"

// windows字体目录
func Dir_Font() (ret string) {
	path, err := windows.KnownFolderPath(windows.FOLDERID_Fonts, 0)
	if err != nil {
		return
	}
	ret = path
	return
}

相关文章