问题
[UPDATE]
I noticed that an invalidate() would be good but it didnt change something! So i put in the whole optionlayout with the creation of the table and the slider + labels. The backbutton is just a textbutton added to the end of the table. I know its a long code but i seems to be needed.
I created a slider like this as i know that the min 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);
}
It's inside a table with no width or such. I already took a look if the width is sett and if the calculation for the prefWidth of the slider does take my 600.
Math.max(style.knob == null ? 0 : style.knob.getMinWidth(), style.background.getMinWidth())
this is the calculation for the width of the slider inside the Sliderclass. If i calculate that and log it, i get the 600.
Everything seems to me right but the slider is way to small for the 600 i sett.
Background and knobtextures are 24x24.
So i hope you guys can tell me what i am doing wrong.

回答1:
I found the solution.
Its inside an table so the width is defined by the table width attibut for the spec. col and row.
So the fix is preaty short.
table.add(volumenSlider).width(600).height(60);
And its 600width and 60 height.
they just added the wiki so its more clear!
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.
Layout at Wiki
Hope it may helps you to fix some issues too.
Regards
回答2:
speedSlider.getStyle().knob.setMinHeight(100)
来源:https://stackoverflow.com/questions/15910879/slider-always-has-default-width