Skip to content
On this page

扩展组件

标准Fyne小部件提供最小的功能和定制,以支持大多数用例。在某些时候,可能需要具有更高级的功能。与其让开发人员构建自己的小部件,还可以扩展现有的小部件。

例如,我们将扩展图标小部件以支持被点击。为此,我们声明了一个新的结构,它嵌入了widget.Icon类型。我们创建了一个构造函数,它调用重要的ExtendeBaseWidget函数。

go
import (
	"fyne.io/fyne/v2"
	"fyne.io/fyne/v2/widget"
)

type tappableIcon struct {
	widget.Icon
}

func newTappableIcon(res fyne.Resource) *tappableIcon {
	icon := &tappableIcon{}
	icon.ExtendBaseWidget(icon)
	icon.SetResource(res)

	return icon
}

WARNING

注意:像widget.NewIcon这样的小部件构造函数不能用于扩展,因为它已经调用了ExtendeBaseWidget。

然后我们添加新的函数来实现fyne.Tapable接口,添加这些函数后,每次用户点击我们的新图标时都会调用新的Tapped函数。所需的接口有两个函数,Tapped(*PointEvent)和TappedSecondary(*PointEvents),因此我们将添加这两个函数。

go
import "log"

func (t *tappableIcon) Tapped(_ *fyne.PointEvent) {
	log.Println("I have been tapped")
}

func (t *tappableIcon) TappedSecondary(_ *fyne.PointEvent) {
}

我们可以使用一个简单的应用程序测试这个新的小部件,如下所示。

go
import (
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/theme"
)

func main() {
	a := app.New()
	w := a.NewWindow("Tappable")
	w.SetContent(newTappableIcon(theme.FyneLogo()))
	w.ShowAndRun()
}