4

我正在尝试使用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

4

1 回答 1

1

你不需要调整任何东西。按照您的尝试设置 LinearLayouts 应该具有相同的效果,但是您使每个 LinearLayout 都包含一个标签。要制作 4x4 网格,您需要一行 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)
}
于 2015-07-07T20:32:45.243 回答