【问题标题】:How to change the size of an existing scene2d.ui widget in a window/table?如何更改窗口/表格中现有 scene2d.ui 小部件的大小?
【发布时间】:2013-08-30 18:10:07
【问题描述】:

我正在尝试调整 scene2d.ui 窗口(基本上是一个可以移动的表格)及其内容的大小。到目前为止,我只能成功更改窗口大小本身,但不能更改其内容。我这样做是这样的:

window.setWidth(newTableWidth);
textField.setWidth(newFieldWidth);
window.invalidate(); <--- New size of window is drawn properly when invalidate() is called
textField.invalidate(); <--- New textField size is NOT drawn, however

在这种情况下,窗口包含一个文本字段,我试图与窗口一起调整它的大小,但只有窗口以新的大小重新绘制,而文本字段保持不变。

如何正确更新窗口中的小部件?

【问题讨论】:

    标签: libgdx


    【解决方案1】:

    根据 BeenX 的回答,很明显,大小是在包含小部件的表格的单元格上设置的,而不是在小部件本身上设置的。 table.add() 方法返回一个单元格,因此在运行 table.add(textField).width(600).height(60) 时,宽度和高度将应用于此单元格。

    因此,我更新现有单元格的解决方案是找到我要使用table.getCells() 更新的单元格,然后在其上应用新宽度。下面的示例更改列表中最后一个单元格的宽度。

    List<Cell> cells = window.getCells(); 
    Cell cell = cells.get(cells.size()-1);
    cell.width(newWidth);
    

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,花了一段时间才找到解决方案。 看看这个问题slider always has default width

      解决办法是:

      UI 小部件不设置自己的大小和位置。相反,父窗口小部件设置每个孩子的大小和位置。小部件提供父级可以用作提示的最小、首选和最大大小。一些父窗口小部件,例如 Table,可以限制子窗口的大小和位置。要在布局中为小部件指定特定尺寸,小部件的最小、首选和最大尺寸将保持不变,并且在父级中设置尺寸约束。
      Layout at Wiki

      来自 libGDX 的 wiki。他们只是添加了它。因此,当您将这些小部件添加到表格时,只需在末尾添加行 .width(newTableWidth),它的宽度应该是正确的。

      table.add(textField).width(600).height(60);
      

      【讨论】:

      • 谢谢。这就是我最初设置小部件大小的方式,但我试图在设置后更改它。我正在调整表格的大小,但在我添加新行之前,其中的所有内容都保持相同的大小。您知道是否可以在不向表格添加新内容的情况下“刷新”小部件的大小?到目前为止,这对我来说似乎是 scene2d 的一个弱点,它似乎不是为了在设置一次后动态更改而设计的。
      • 您确实调整了它的单元格而不是小部件本身。之后,您确实在桌子上使用了无效。我认为它并不弱,它只是它的工作原理
      • 是的,我现在也意识到需要对单元格而不是小部件进行更改。感谢您为我指明正确的方向。
      • 您的好。我花了大约 5-6 天的时间才发现,因为没有任何关于它的文章。我当时做了一张票,以获取有关它的信息。
      猜你喜欢
      • 1970-01-01
      • 2022-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-09
      • 2012-12-10
      • 2013-02-06
      • 2021-08-29
      相关资源
      最近更新 更多