Libgdx能否设置ScrollPane的边界?

4

最近我发现了滚动面板,一直在尝试正确地实现它。

经过一番搜索,我找到了以下代码段:

public void create() {
    batch = new SpriteBatch();
    skin = new Skin(Gdx.files.internal("data/uiskin.json"));
    stage = new Stage();

    gamelog = new Label("Start", skin);
    gamelog.setAlignment(Align.center);
    gamelog.setWrap(true);

    Table scrollTable = new Table();
    scrollTable.add(gamelog);
    scrollTable.row();

    scroller = new ScrollPane(scrollTable);


    Table table = new Table();
    table.setFillParent(true);
    table.add(scroller).fill().expand();

现在,这段代码大部分情况下都能很好地工作。事实上已经创建了滚动面板,我也可以动态地向其中添加文本。然而,我的问题是滚动面板的大小占据了整个屏幕,并且初始文本位于滚动面板的中央(即屏幕的中央),只有在添加足够的文本以填满整个屏幕高度后,才会开始滚动。
与其自行扩展,我实际上希望滚动面板仅占据屏幕底部的一个小区域。
我尝试设置表格和滚动面板的边界,但最接近的结果只是将滚动面板移动下来(意味着最后添加的文本不在屏幕上,无法显示)。它似乎完全忽略了任何设置的宽度或高度,而是自行扩展。
我想,我可以简单地在屏幕底部使用一组标签,并动态更改它们的文本,但那样就失去了滚动功能。因此,在我这样做之前,我希望能有人解答一下是否可以重新调整和设置滚动面板的边界。
2个回答

2

在您的原始代码中尝试以下操作:

table.add(scroller).size(460, 200);

如果您想在将滚动窗格添加到表格后更改其大小,可以从表格中获取单元格,然后像这样设置其大小:

table.add(scroller);
...
table.getCell(scroller).size(460, 200);

以下是Cell的API:

https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/scenes/scene2d/ui/Cell.html


使用单元格来设置其组件的尺寸。当您将一个组件添加到表格中时,它会返回包含该组件的表格单元格。然后,您可以使用该单元格来设置组件的大小。(注:本文涉及IT技术,翻译仅供参考,具体请以原文为准)

如果您想要滚动窗格的宽度适应屏幕(而不是硬编码一个大小),请使用 table.add(scroller).height(200).expandX().fillX().bottom();,并且不需要在表格上设置边界,直接使用 table.setFillParent(true) 即可。 - Tenfour04

0

我通过试错找到了一个解决方案。

以下代码适用于我,并允许调整和定位滚动窗格。主要问题似乎是使用table.setFillParent(true);以及尝试设置父表边界的顺序。

    batch = new SpriteBatch();
    skin = new Skin(Gdx.files.internal("data/uiskin.json"));
    stage = new Stage();

    gamelog = new Label("Start", skin);
    gamelog.setAlignment(Align.center);
    gamelog.setWrap(true);

    Table scrollTable = new Table();
    scrollTable.add(gamelog);
    scrollTable.row();

    scroller = new ScrollPane(scrollTable);

    Table table = new Table();
    table.setBounds(10, 10, 460, 200);
    table.add(scroller).fill().expand();

    scrollTable.debug();
    scroller.debug();
    table.debug();

    stage.addActor(table);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接