我们可以使用 fyne 布局系统中的语义名称,对于作为第一语言的英语,名称很清楚,但对于其他人,我希望这篇文章有所帮助。
对于语义,例如 VBoxLayout 命名表示布局是一个垂直填充的框,或者 MaxLayout 是一个将获取最大可用空间的框, 使用所有分配的空间布局内容。
对于上述问题,一种方法是使用 VBoxLayout 创建一个顶级容器,然后使用 MaxLayout来获取可用的水平空间并可能解决问题中的问题,然后我们可以使用 LayoutWithColumns 添加我们想要的约束空间,
c1 := canvas.NewText("Canvas Object 1", color.White)
c2 := canvas.NewText("Canvas Object 2", color.White)
n1 := canvas.NewText("Canvas Object 3", color.White)
n2 := canvas.NewText("Canvas Object 4", color.White)
topLevelLayOutContent = container.New(layout.NewVBoxLayout(),
- 现在添加使用 MaxLayout 和 LayoutWithColumns 作为约束的较低级别的容器
topLevelLayOutContent = container.New(layout.NewVBoxLayout(),
container.New(layout.NewMaxLayout(),
container.New(layout.NewGridLayoutWithColumns(2), c1, c2)),
container.New(layout.NewMaxLayout(),
container.New(layout.NewGridLayoutWithColumns(2), n1, n2)),
)
简单的工作示例
import (
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/canvas"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/layout"
"fyne.io/fyne/v2/app"
"image/color"
)
var topLevelLayOutContent *fyne.Container
func main() {
a := app.New()
win := a.NewWindow("Server Mon")
c1 := canvas.NewText("Canvas Object 1", color.White)
c2 := canvas.NewText("Canvas Object 2", color.White)
n1 := canvas.NewText("Canvas Object 3", color.White)
n2 := canvas.NewText("Canvas Object 4", color.White)
topLevelLayOutContent = container.New(layout.NewVBoxLayout(),
container.New(layout.NewMaxLayout(),
container.New(layout.NewGridLayoutWithColumns(2), c1, c2)),
container.New(layout.NewMaxLayout(),
container.New(layout.NewGridLayoutWithColumns(2), n1, n2)),
)
win.SetContent(topLevelLayOutContent)
win.Resize(fyne.NewSize(float32(400), float32(30)))
win.ShowAndRun()
}
- 答案已更新以反映 MaxLayout 行为下方的评论