Container and Layouts

In the previous example we saw how to set a CanvasObject to the content of a Canvas, but it is not very useful to only show one visual element. To show more than one item we use the Container type.

As the fyne.Container is also a fyne.CanvasObject we can set it to be the content of a fyne.Canvas. In this example we create 3 text objects and then place them in a container using the NewContainer() function. As there is no layout set we can move the elements around like you see with text2.Move().

A fyne.Layout implements a method for organising items within a container. By uncommenting the NewContainerWithLayout() line in this example you alter the container to use a grid layout with 2 columns. Run this code and try resizing the window to see how the layout automatically configures the contents of the window. Notice also that the manual position of text2 is ignored by the layout code.

To find out more jump to the Layout section of this tour.

Example Code

            
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package main

import (
	"image/color"

	"fyne.io/fyne"
	"fyne.io/fyne/app"
	"fyne.io/fyne/canvas"
	//"fyne.io/fyne/layout"
)

func main() {
	myApp := app.New()
	myWindow := myApp.NewWindow("Container")

	text1 := canvas.NewText("Hello", color.White)
	text2 := canvas.NewText("There", color.White)
	text2.Move(fyne.NewPos(20, 20))
	text3 := canvas.NewText("World", color.White)
	container := fyne.NewContainer(text1, text2, text3)
	//	container := fyne.NewContainerWithLayout(layout.NewGridLayout(2),
	//		text1, text2, text3)

	myWindow.SetContent(container)
	myWindow.ShowAndRun()
}