2013-04-09 9 views
16

[UPDATE] invalidate()がうまくいくように気付きましたが、何か変わっていませんでした!だから、私はテーブルとスライダー+ラベルの作成と全体のオプションレイアウトを入れた。バックボタンは、テーブルの最後に追加されたテキストボタンです。私はその長いコードを知っているが、私は必要と思われる。
スライダは常にデフォルトの幅を持っています

は、私は私がバックグラウンドの分幅はスライダー幅のために使用されていることを知っているように、このようなスライダーを作成しました:

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のための計算は私の600

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

を取るない場合、これはSliderclass内部のスライダーの幅のための計算である場合、私はすでに見ていました。私はそれを計算し、それをログに記録すると、私は600を取得します。
すべてが私には正しいようですが、スライダは600 i settのための小さな方法です。
背景とノブのテクスチャは24x24です。
だから私はあなたが間違っていることを私に教えてくれることを願っています。 silder

答えて

13

解決策が見つかりました。
テーブルの内側にあるので、幅はspecのテーブル幅attibutで定義されます。列と行。
したがって、修正は簡単ではありません。

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

そして、その600幅と60高さ。



ウィキを追加したばかりです。

UIウィジェットは独自のサイズと位置を設定しません。代わりに、親ウィジェットは各子のサイズと位置を設定します。ウィジェットは、親がヒントとして使用できる最小、優先、最大サイズを提供します。 Tableのような親ウィジェットの中には、子のサイズや配置方法の制約を与えることができます。ウィジェットのレイアウトに特定のサイズを与えるには、ウィジェットの最小、優先、最大のサイズはそのままにし、サイズの制約は親に設定します。

Layout at Wiki

それはあまりにもいくつかの問題を修正するのに役立ちますことを願っています。
よろしくお願いいたします。

0
speedSlider.getStyle().knob.setMinHeight(100) 
関連する問題