Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 滑块在表格中始终具有默认宽度_Java_Android_Libgdx - Fatal编程技术网

Java 滑块在表格中始终具有默认宽度

Java 滑块在表格中始终具有默认宽度,java,android,libgdx,Java,Android,Libgdx,我在表格内创建了一个滑块,如下面的代码示例所示,因为我知道最小背景宽度用于滑块宽度: public OptionScreen(MainClass game) { super(game); preference = new PreferencesHelper(); font = this.getDefaultFont(25); this.table = new Table(); if (Config.DEBUG) this.table.deb

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

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);
}
幻灯片位于未设置宽度的桌子内。我已经查看了宽度是否已设置,以及滑块宽度的计算是否使用设置600f

Math.max(style.knob == null ? 0 : style.knob.getMinWidth(), style.background.getMinWidth())
是滑块类内滑块宽度的计算。如果我计算并记录它,它记录所需的600f

在我看来,一切都很正常,但对于我设置的600,滑块被渲染为很小

背景和KnobTexture为24x24

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


公式是,它位于表格内,因此宽度由表格宽度定义,但不适用于规格列和行

因此,修复非常简单:

table.add(volumenSlider).width(600).height(60);
它的宽度是600,高度是60


对wiki进行了编辑,以便更清楚地了解这一点: UI小部件不设置自己的大小和位置。相反,父窗口小部件设置每个子窗口的大小和位置。小部件提供了父级可以用作提示的最小、首选和最大大小。一些父窗口小部件(如Table)可以在如何调整子窗口小部件的大小和位置方面受到约束。为了在布局中为小部件指定一个特定的大小,小部件的最小、首选和最大大小将被保留,并且大小约束将在父级中设置

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