滑块在表中始终具有默认宽度 [英] Slider always has default width in table

查看:65
本文介绍了滑块在表中始终具有默认宽度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在表格内部创建了一个滑块,如下面的代码示例所示,因为我知道滑块的宽度使用了背景的最小宽度:

I created a slider inside of a table like shown in the following code example as I know that the minimum width of the background is used for the slider width:

public OptionScreen(MainClass game) {
    super(game);
    preference = new PreferencesHelper();
    font = this.getDefaultFont(25);
    this.table = new Table();
    if (Config.DEBUG)
        this.table.debug();

    // add volumenlabel
    LabelStyle style = new LabelStyle(font, Color.WHITE);
    volumenLabel = new Label(Config.VOLUMEN_LABLE, style);
    table.add(volumenLabel).colspan(2);
    table.row();
    // add slider
    Skin skin = new Skin();
    skin.add("sliderbackground",
            this.game.manager.get("data/sliderbackground.png"));
    skin.add("sliderknob", this.game.manager.get("data/sliderknob.png"));

    SliderStyle sliderStyle = new SliderStyle();
    sliderStyle.background = skin.getDrawable("sliderbackground");
    sliderStyle.background.setMinWidth(600f);
    sliderStyle.knob = skin.getDrawable("sliderknob");

    volumenSlider = new Slider(0f, 1f, 0.1f, false, sliderStyle);
    volumenSlider.setValue(preference.getVolumen()); // load current volumen
    volumenSlider.addListener(new ChangeListener() {

        @Override
        public void changed(ChangeEvent event, Actor actor) {
            volumeValue.setText(String.format("%.01f",
                    volumenSlider.getValue()));
            // sett the preference
            preference.setVolumen(volumenSlider.getValue());
        }
    });
    // add volslider to stage
    table.add(volumenSlider);
    volumenLabel.invalidate();

    // table
    style = new LabelStyle(font, Color.WHITE);
    // set current volumen
    volumeValue = new Label(
            String.format("%.01f", volumenSlider.getValue()), style);
    volumenLabel.setAlignment(2);
    table.add(volumeValue).width(50f);
    table.row();

    initBackButton();

    // init table
    table.setPosition(Config.VIRTUAL_VIEW_WIDTH / 2,
            Config.VIRTUAL_VIEW_HEIGHT / 2 - Config.BLOCK_SIZE * 10);

    // add a nice fadeIn to the whole table :)
    table.setColor(0, 0, 0, 0f);
    table.addAction(Actions.fadeIn(2f)); // alpha fade
    table.addAction(Actions.moveTo(Config.VIRTUAL_VIEW_WIDTH / 2,
            Config.VIRTUAL_VIEW_HEIGHT / 2, 2f)); // move to center of the
                                                    // screen
    // add to stage
    this.stage.addActor(table);
}

幻灯片位于未设置宽度的桌子内.我已经看过是否设置了宽度,以及滑块的prefWidth的计算是否使用了设置的600f.

The slide is inside a table with no width set. I already took a look if the width is set and if the calculation for the prefWidth of the slider does uses the set 600f.

Math.max(style.knob == null ? 0 : style.knob.getMinWidth(), style.background.getMinWidth())

是Sliderclass内滑块宽度的计算.如果我计算并记录下来,它将记录所需的600f.

Is the calculation for the width of the slider inside the Sliderclass. If I calculate that and log it, it loggs the desired 600f.

一切似乎对我来说都是正确的,但是对于我设置的600滑块,滑块已变小了.

Everything seems right to me but the slider is rendered way to small for the 600 I set.

背景和旋钮纹理为24x24.

The background and knobtextures are 24x24.

所以我希望你们能告诉我我在做错什么.

So I hope you guys can tell me what I am doing wrong.

推荐答案

问题在于,它位于表格内部,因此宽度由规格的表格宽度attibut定义.列和行.

The folution is, that it's inside an table so the width is defined by the table width attibut for the spec. col and row.

因此修复很短:

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

其宽度为600,高度为60.

And its 600width and 60 height.

UI窗口小部件未设置其自身的大小和位置.而是由父窗口小部件设置每个子窗口的大小和位置.小部件提供了父级可以用作提示的最小,首选和最大大小.可以为某些父级小部件(例如Table)赋予如何设置子级大小和位置的约束.要在布局中为小部件指定特定的大小,应保留小部件的最小,首选和最大大小,并在父级中设置大小限制.

UI widgets do not set their own size and position. Instead, the parent widget sets the size and position of each child. Widgets provide a minimum, preferred, and maximum size that the parent can use as hints. Some parent widgets, such as Table, can be given constraints on how to size and position the children. To give a widget a specific size in a layout, the widget's minimum, preferred, and maximum size are left alone and size constraints are set in the parent.

Wiki上的布局

这篇关于滑块在表中始终具有默认宽度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆