2013-04-09 1 views
16

[업데이트] 나는 invalidate()가 좋겠지 만 뭔가 바뀌지는 않았 음을 알았습니다! 그래서 나는 테이블과 슬라이더 + 라벨의 생성과 함께 전체 optionlayout에 넣었습니다. 뒤로 버튼은 테이블 끝 부분에 추가 된 텍스트 버튼입니다. 나는 긴 코드를 알고 있지만 나는 필요할 것으로 보인다.
슬라이더에는 항상 기본 너비가 있습니다

나는 내가 배경의 최소 폭이 슬라이더 폭에 사용되는 것을 알고이 같은 슬라이더를 만들어 :

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

해결책을 찾았습니다.
너비가 테이블의 너비로 정의되므로 테이블 내부에 테이블이 있습니다. col와 row.
그래서 수정 사항이 짧습니다.

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

그리고 600 폭과 60 높이.



그들은 방금 위키를 추가했습니다.

UI 위젯은 크기와 위치를 설정하지 않습니다. 대신 상위 위젯은 각 하위의 크기와 위치를 설정합니다. 위젯은 부모가 힌트로 사용할 수있는 최소, 선호 및 최대 크기를 제공합니다. 표와 같은 일부 상위 위젯에는 하위 항목의 크기 및 위치 지정 방법에 대한 제약 조건을 지정할 수 있습니다. 레이아웃에서 위젯에 특정 크기를 부여하기 위해 위젯의 최소, 기본 및 최대 크기는 그대로두고 크기 제약 조건은 부모에 설정됩니다. Layout at Wiki

은 당신이 너무 몇 가지 문제를 해결하는 데 도움이 있습니다 바랍니다.
감사합니다.

0
speedSlider.getStyle().knob.setMinHeight(100) 
관련 문제