Pytanie suwak ma zawsze domyślną szerokość


[AKTUALIZACJA] Zauważyłem, że unieważnienie () byłoby dobre, ale nie zmieniło czegoś! Wrzuciłem więc całą gamelayout wraz z utworzeniem tabeli i suwakiem + etykietami. Backbutton jest po prostu tekstem dodanym do końca tabeli. Wiem, że to długi kod, ale wydaje mi się potrzebny.

Stworzyłem suwak taki jak ten, ponieważ wiem, że minimalna szerokość tła jest używana dla szerokości suwaka:

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);
}

Jest w środku stołu bez szerokości i tak dalej. Już sprawdziłem, czy szerokość jest ustawiona i czy obliczenia dla prefWidth suwaka zajmują moje 600.

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

to jest obliczenie szerokości suwaka wewnątrz Sliderclass. Jeśli to obliczy i zapiszę, otrzymam 600.
Wydaje mi się, że wszystko jest w porządku, ale suwak jest na tyle mały, że ustawi się na 600.
Tło i pokrętła są 24x24.
Mam więc nadzieję, że wy możecie mi powiedzieć, co robię źle. silder


16
2018-04-09 19:31


pochodzenie




Odpowiedzi:


Znalazłem rozwiązanie.
Jest wewnątrz stołu, więc szerokość jest określona przez szerokość stołu attibut dla spec. col i wiersz.
Tak więc poprawka jest krótka.

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

I jego 600 szerokości i 60 wysokości.



 po prostu dodali wiki, aby było bardziej zrozumiałe!

Widżety interfejsu użytkownika nie określają własnego rozmiaru i pozycji. Zamiast tego widżet nadrzędny określa rozmiar i położenie każdego dziecka. Widżety zapewniają minimalny, preferowany i maksymalny rozmiar, który rodzic może wykorzystać jako wskazówki. Niektórym widżetom nadrzędnym, takim jak Tabela, można nadać ograniczenia dotyczące sposobu wymiarowania i pozycjonowania elementów podrzędnych. Aby nadać widgetowi określony rozmiar w układzie, minimalny, preferowany i maksymalny rozmiar widżetu jest pozostawiony sam, a ograniczenia rozmiaru są ustawiane w obiekcie nadrzędnym.

Układ na Wiki

Mam nadzieję, że pomoże ci rozwiązać niektóre problemy.
pozdrowienia


13
2018-04-15 17:31





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

0
2017-09-09 19:56