2013-04-09 6 views
16

[UPDATE] Ich bemerkte, dass ein invalidate() wäre gut, aber es hat nicht etwas geändert! Also lege ich das gesamte Optionslayout mit der Erstellung der Tabelle und des Sliders + Labels ein. Der Backbutton ist nur eine Texttaste am Ende der Tabelle. Ich weiß, dass es ein langer Code ist, aber ich scheint gebraucht zu werden.
Slider hat immer Standardbreite

habe ich einen Schieber wie dies, wie ich weiß, dass die min Breite des Hintergrunds für den Schieber Breite verwendet wird:

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

Es ist in einer Tabelle ohne Breite oder dergleichen. Ich habe bereits einen Blick, wenn die Breite sett ist und wenn die Berechnung für die prefWidth des Schiebers meines nimmt 600.

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

dies ist die Berechnung für die Breite des Schiebers innerhalb des Sliderclass. Wenn ich das kalkuliere und es logge, bekomme ich die 600.
Alles scheint mir richtig, aber der Schieberegler ist viel zu klein für die 600 ich einstellen.
Hintergrund und Knobtextures sind 24x24.
Also ich hoffe, Sie können mir sagen, was ich falsch mache. silder

Antwort

13

Ich fand die Lösung.
Es ist in einem Tisch so die Breite wird durch die Tabelle Breite attibut für die Spezifikation definiert. Spalte und Zeile.
So ist das Update preaty kurz.

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

Und seine 600 Breite und 60 Höhe.



sie haben soeben das Wiki, um seine mehr klar!

UI-Widgets legen keine eigene Größe und Position fest. Stattdessen legt das übergeordnete Widget die Größe und Position jedes untergeordneten Elements fest. Widgets bieten eine minimale, bevorzugte und maximale Größe, die der Elternteil als Hinweise verwenden kann. Bei einigen übergeordneten Widgets, z. B. Tabelle, können Einschränkungen für die Größen- und Positionsbestimmung der untergeordneten Elemente festgelegt werden. Um einem Widget eine bestimmte Größe in einem Layout zu geben, werden die minimale, bevorzugte und maximale Größe des Widgets in Ruhe gelassen und Größenbeschränkungen werden im übergeordneten Element festgelegt.

Layout at Wiki

Hoffe, es hilft könnten Sie auch einige Probleme zu beheben.
Mit freundlichen Grüßen

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