Java Libgdx制作列表和滚动窗格包装文本?

Java Libgdx制作列表和滚动窗格包装文本?,java,android,libgdx,Java,Android,Libgdx,我想知道,是否有任何方法可以在LibGDX中创建一个水平包装文本的滚动窗格和列表。我希望滚动窗格可以垂直滚动,但它可以包装文本,而不是水平滚动 我知道我可以通过使用禁用X方向的滚动 scrollPane.setScrollingDisabled(false, true); 但是有没有办法使文本换行,这样就不会出现水平滚动,只会转到新行?您可以使用标签换行。然后将这些标签添加到滚动窗格。您可以使用标签包装文本。然后将这些标签添加到滚动窗格中。您可以通过以下方式执行: public class S

我想知道,是否有任何方法可以在LibGDX中创建一个水平包装文本的滚动窗格和列表。我希望滚动窗格可以垂直滚动,但它可以包装文本,而不是水平滚动

我知道我可以通过使用禁用X方向的滚动

scrollPane.setScrollingDisabled(false, true);

但是有没有办法使文本换行,这样就不会出现水平滚动,只会转到新行?

您可以使用标签换行。然后将这些标签添加到滚动窗格。

您可以使用标签包装文本。然后将这些标签添加到滚动窗格中。

您可以通过以下方式执行:

public class ScrollPaneTest extends ApplicationAdapter {
    private Stage stage;
    private Table container;

    @Override
    public void create () {
        stage = new Stage();
        Skin skin = new Skin(Gdx.files.internal("skin/glassy-ui.json"));
        Gdx.input.setInputProcessor(stage);

        container = new Table();
        stage.addActor(container);
        container.setFillParent(true);

        Table table = new Table();

        final ScrollPane scroll = new ScrollPane(table, skin);
        scroll.setScrollingDisabled(true,false);

        table.pad(10).defaults().expandX().space(4);
        for (int i = 0; i < 100; i++) {
            table.row();

            Label label=new Label(i + ". Publish your games on Windows, Mac, Linux, Android, iOS, BlackBerry and HTML5, all with the same code base.", skin);
            label.setAlignment(Align.center);
            label.setWrap(true);
            table.add(label).width(Gdx.graphics.getWidth());
        }

        container.add(scroll).expand().fill();
    }

    @Override
    public void render () {
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        stage.act(Gdx.graphics.getDeltaTime());
        stage.draw();
    }

    @Override
    public void resize (int width, int height) {
        stage.getViewport().update(width, height, true);
    }

    @Override
    public void dispose () {
        stage.dispose();
    }
}
公共类ScrollPaneTest扩展应用程序适配器{
私人舞台;
专用表容器;
@凌驾
公共void创建(){
阶段=新阶段();
皮肤=新皮肤(Gdx.files.internal(“Skin/glassy ui.json”);
Gdx.input.setInputProcessor(阶段);
容器=新表();
stage.addActor(容器);
container.setFillParent(true);
Table Table=新表();
最终滚动窗格滚动=新滚动窗格(表、皮肤);
scroll.setScrollingDisabled(真、假);
table.pad(10).defaults().expandX().space(4);
对于(int i=0;i<100;i++){
table.row();
Label Label=新标签(i+”。在Windows、Mac、Linux、Android、iOS、BlackBerry和HTML5上发布游戏,所有这些都具有相同的代码基。”,皮肤);
标签.设置对齐(对齐.中心);
label.setWrap(true);
table.add(label.width(Gdx.graphics.getWidth());
}
container.add(scroll.expand().fill();
}
@凌驾
公共无效渲染(){
Gdx.gl.glClear(GL20.gl\u颜色\u缓冲\u位);
stage.act(Gdx.graphics.getDeltaTime());
stage.draw();
}
@凌驾
公共空心调整大小(整型宽度、整型高度){
stage.getViewport().update(宽度、高度、真值);
}
@凌驾
公共空间处置(){
stage.dispose();
}
}
输出为:


您可以这样做:

public class ScrollPaneTest extends ApplicationAdapter {
    private Stage stage;
    private Table container;

    @Override
    public void create () {
        stage = new Stage();
        Skin skin = new Skin(Gdx.files.internal("skin/glassy-ui.json"));
        Gdx.input.setInputProcessor(stage);

        container = new Table();
        stage.addActor(container);
        container.setFillParent(true);

        Table table = new Table();

        final ScrollPane scroll = new ScrollPane(table, skin);
        scroll.setScrollingDisabled(true,false);

        table.pad(10).defaults().expandX().space(4);
        for (int i = 0; i < 100; i++) {
            table.row();

            Label label=new Label(i + ". Publish your games on Windows, Mac, Linux, Android, iOS, BlackBerry and HTML5, all with the same code base.", skin);
            label.setAlignment(Align.center);
            label.setWrap(true);
            table.add(label).width(Gdx.graphics.getWidth());
        }

        container.add(scroll).expand().fill();
    }

    @Override
    public void render () {
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        stage.act(Gdx.graphics.getDeltaTime());
        stage.draw();
    }

    @Override
    public void resize (int width, int height) {
        stage.getViewport().update(width, height, true);
    }

    @Override
    public void dispose () {
        stage.dispose();
    }
}
公共类ScrollPaneTest扩展应用程序适配器{
私人舞台;
专用表容器;
@凌驾
公共void创建(){
阶段=新阶段();
皮肤=新皮肤(Gdx.files.internal(“Skin/glassy ui.json”);
Gdx.input.setInputProcessor(阶段);
容器=新表();
stage.addActor(容器);
container.setFillParent(true);
Table Table=新表();
最终滚动窗格滚动=新滚动窗格(表、皮肤);
scroll.setScrollingDisabled(真、假);
table.pad(10).defaults().expandX().space(4);
对于(int i=0;i<100;i++){
table.row();
Label Label=新标签(i+”。在Windows、Mac、Linux、Android、iOS、BlackBerry和HTML5上发布游戏,所有这些都具有相同的代码基。”,皮肤);
标签.设置对齐(对齐.中心);
label.setWrap(true);
table.add(label.width(Gdx.graphics.getWidth());
}
container.add(scroll.expand().fill();
}
@凌驾
公共无效渲染(){
Gdx.gl.glClear(GL20.gl\u颜色\u缓冲\u位);
stage.act(Gdx.graphics.getDeltaTime());
stage.draw();
}
@凌驾
公共空心调整大小(整型宽度、整型高度){
stage.getViewport().update(宽度、高度、真值);
}
@凌驾
公共空间处置(){
stage.dispose();
}
}
输出为:

@Draz我是否可以将所有标签添加到列表中?然后转到滚动窗格。如果是这样,当我这样做并将其添加到滚动窗格时,它正在添加[Label:my text here],而之前它只是简单地执行“my text here”@Draz,那么我会通过将所有标签添加到列表中来实现这一点吗?然后转到滚动窗格。如果是这样,当我这样做并将其添加到滚动窗格时,它正在添加[Label:my text here],而之前它只是简单地执行“my text here”