Ползунок всегда имеет ширину по умолчанию

[ОБНОВЛЕНИЕ] Я заметил, что invalidate() будет хорошо, но это ничего не изменило! Поэтому я включил весь файл optionlayout с созданием таблицы и слайдера + ярлыков. Подсказка - это только текстовая кнопка, добавленная в конец таблицы. Я знаю его длинный код, но мне кажется, что это необходимо.

Я создал такой слайдер, как я знаю, что минимальная ширина фона используется для ширины ползунка:

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 ползунка займет 600.

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

это вычисление ширины слайдера внутри Sliderclass. Если я вычислил это и зарегистрировал его, я получу 600.
Все кажется мне правильным, но слайдер - это путь к малым для 600-й стойки.
Фон и кнопочные текстуры - 24x24.
Поэтому я надеюсь, что вы, ребята, можете сказать мне, что я делаю неправильно. silder

Ответы

Ответ 1

Я нашел решение.
Его внутри стола, так что ширина определяется шириной таблицы attibut для спецификации. col и row.
Таким образом, исправление является преатитестым.

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

И его ширина 600 и высота 60.



они просто добавили вики, чтобы он стал более ясным!

Виджеты пользовательского интерфейса не задают свой собственный размер и позицию. Вместо этого родительский виджет устанавливает размер и положение каждого дочернего элемента. Виджеты предоставляют минимальный, предпочтительный и максимальный размер, который родитель может использовать в качестве подсказок. Некоторым родительским виджетам, таким как Таблица, могут быть предоставлены ограничения на размер и расположение детей. Чтобы дать виджету определенного размера в макете, минимальный размер, предпочтительный и максимальный размер виджета оставлены в покое, а ограничения размера установлены в родительском.

Макет в Wiki

Надеюсь, это поможет вам исправить некоторые проблемы.
Отношения

Ответ 2

speedSlider.getStyle().knob.setMinHeight(100)