滑块在表格中始终具有默认宽度
Posted
技术标签:
【中文标题】滑块在表格中始终具有默认宽度【英文标题】:Slider always has default width in table 【发布时间】:2013-04-01 09:51:31 【问题描述】:我在表格内创建了一个滑块,如以下代码示例所示,因为我知道背景的最小宽度用于滑块宽度:
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。
Math.max(style.knob == null ? 0 : style.knob.getMinWidth(), style.background.getMinWidth())
是对Sliderclass里面的滑块宽度的计算。如果我计算并记录它,它会记录所需的 600f。
一切对我来说似乎都是正确的,但是对于我设置的 600,滑块的渲染方式太小了。
背景和旋钮纹理是 24x24。
所以我希望你们能告诉我我做错了什么。
【问题讨论】:
【参考方案1】:问题是,它在表格内,因此宽度由规范的表格宽度属性定义。列和行。
所以修复很短:
table.add(volumenSlider).width(600).height(60);
它的宽度为 600,高度为 60。
对 wiki 进行了编辑以更清楚地说明这一点:
UI 小部件不设置自己的大小和位置。相反,父窗口小部件设置每个孩子的大小和位置。小部件提供父级可以用作提示的最小、首选和最大大小。一些父窗口小部件,例如 Table,可以限制子窗口的大小和位置。要在布局中为小部件指定特定尺寸,小部件的最小、首选和最大尺寸将保持不变,并且在父级中设置尺寸约束。
Layout at Wiki
【讨论】:
【参考方案2】:speedSlider.getStyle().knob.setMinHeight(100)
【讨论】:
以上是关于滑块在表格中始终具有默认宽度的主要内容,如果未能解决你的问题,请参考以下文章