2013-04-09 7 views
16

[MISE À JOUR] J'ai remarqué qu'un invalide() serait bon mais il n'a pas changé quelque chose! J'ai donc mis dans l'ensemble de l'option avec la création de la table et le slider + étiquettes. Le bouton de retour est juste un texte ajouté à la fin de la table. Je sais que c'est un code long mais il semble que ce soit nécessaire.
curseur a toujours la largeur par défaut

J'ai créé un curseur comme celui-ci que je sais que la largeur minimum de l'arrière-plan est utilisé pour la largeur du curseur:

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

Il est à l'intérieur d'une table sans largeur ou tel. Je l'ai déjà pris un coup d'oeil si la largeur est SETT et si le calcul de la prefWidth du curseur ne prend mon 600.

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

c'est le calcul de la largeur du curseur à l'intérieur du Sliderclass. Si je calcule cela et le connecte, je reçois le 600.
Tout me semble bien, mais le curseur est trop petit pour les 600 i sett.
Les textures de fond et de bouton sont 24x24.
Donc j'espère que vous pouvez me dire ce que je fais mal. silder

Répondre

13

J'ai trouvé la solution.
Son intérieur d'une table de sorte que la largeur est définie par la largeur de la table attibut pour la spécification. col et rangée.
Donc le correctif est très court.

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

Et ses 600width et 60 height.



ils ont juste ajouté le wiki de sorte que son plus clair!

Les widgets UI ne définissent pas leur propre taille et position. Au lieu de cela, le widget parent définit la taille et la position de chaque enfant. Les widgets fournissent une taille minimale, préférée et maximale que le parent peut utiliser comme indicateurs. Certains widgets parents, tels que Table, peuvent être soumis à des contraintes sur la façon de dimensionner et positionner les enfants. Pour donner à un widget une taille spécifique dans une mise en page, les tailles minimale, préférée et maximale du widget restent seules et les contraintes de taille sont définies dans le parent.

Layout at Wiki

espérant qu'il vous aide à résoudre des problèmes aussi.
Cordialement

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