[更新]我注意到一个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);
}
Run Code Online (Sandbox Code Playgroud)
它在一张没有宽度的桌子里面.我已经看过宽度是否已经设置,以及滑块的prefWidth的计算是否需要我的600.
Math.max(style.knob == null ? 0 : style.knob.getMinWidth(), style.background.getMinWidth())
Run Code Online (Sandbox Code Playgroud)
这是Sliderclass内滑块宽度的计算.如果我计算并记录它,我得到600.
一切似乎在我看来,但滑块是600 i沉降的小.
背景和knobtextures是24x24.
所以我希望你们能告诉我我做错了什么.

Ben*_*nnX 13
我找到了解决方案.
它在一个表内,所以宽度是由规格的表格宽度定义的.col和row.
所以修复很简单.
table.add(volumenSlider).width(600).height(60);
Run Code Online (Sandbox Code Playgroud)
它的600宽度和60高度.
他们只是添加了维基,所以它更清晰!
UI小部件不设置自己的大小和位置.相反,父窗口小部件设置每个子项的大小和位置.窗口小部件提供父级可用作提示的最小,首选和最大大小.某些父窗口小部件(如Table)可以为如何调整子项的大小和位置提供约束.要在窗体中为窗口小部件指定特定大小,窗口小部件的最小,首选和最大大小将保持不变,并且在父窗口中设置大小约束.
希望它也可以帮助你解决一些问题.
问候
| 归档时间: |
|
| 查看次数: |
3791 次 |
| 最近记录: |