Как установить размер LinearLayout в GXUI
Я пытаюсь сделать сетку с GXUI, я использую LinearLayout
для строк и столбцов, но у меня есть проблема с изменением размера.
package main
import (
"fmt"
"github.com/google/gxui"
"github.com/google/gxui/math"
"github.com/google/gxui/drivers/gl"
"github.com/google/gxui/samples/flags"
"github.com/google/gxui/themes/dark"
)
func appMain(driver gxui.Driver) {
theme := dark.CreateTheme(driver)
window := theme.CreateWindow(800, 600, "Grid")
window.SetScale(flags.DefaultScaleFactor)
window.OnClose(driver.Terminate)
size := window.Viewport().SizeDips()
grid := theme.CreateLinearLayout()
grid.SetDirection(gxui.TopToBottom)
grid.SetSizeMode(gxui.Fill)
for y := 0; y < 4; y++ {
row := theme.CreateLinearLayout()
row.SetDirection(gxui.LeftToRight)
for x := 0; x < 4; x++ {
label := theme.CreateLabel()
label.SetText(fmt.Sprintf("%d", y*4+x))
cell := theme.CreateLinearLayout()
cell.SetDirection(gxui.TopToBottom)
cell.SetSize(math.Size{W: size.W/4, H: size.H/4}) // not actually resizes
cell.AddChild(label)
row.AddChild(cell)
}
grid.AddChild(row)
}
window.AddChild(grid)
}
func main() {
gl.StartDriver(appMain)
}
Это результат:
Обновление: GXUI теперь имеет TableLayout
1 ответ
Решение
Вам не нужно ничего менять размер. Настройка LinearLayouts, которую вы пытаетесь сделать, должна иметь тот же эффект, но вы заставляете каждый LinearLayout содержать одну метку. Чтобы создать сетку 4х4, вам нужен один ряд из 4 столбцов, каждый из которых имеет 4 метки. Это сделает все красиво. Вот код, который делает это.
код:
package main
import (
"fmt"
"github.com/google/gxui"
"github.com/google/gxui/drivers/gl"
"github.com/google/gxui/samples/flags"
"github.com/google/gxui/themes/dark"
)
func appMain(driver gxui.Driver) {
theme := dark.CreateTheme(driver)
window := theme.CreateWindow(800, 600, "Grid")
window.SetScale(flags.DefaultScaleFactor)
window.OnClose(driver.Terminate)
row := theme.CreateLinearLayout()
row.SetDirection(gxui.LeftToRight)
for c := 0; c < 4; c++ {
col := theme.CreateLinearLayout()
col.SetDirection(gxui.TopToBottom)
for r := 0; r < 4; r++ {
cell := theme.CreateLabel()
cell.SetText(fmt.Sprintf("%d", r*4+c))
col.AddChild(cell)
}
row.AddChild(col)
}
window.AddChild(row)
}
func main() {
gl.StartDriver(appMain)
}