2014-05-21 4 views
0

나는 동적으로 버튼을 만들고 있으며 무작위로 화면에 배치하려고합니다. 그렇게하기 위해 화면의 너비에서 단추의 너비를 뺍니다. 문제는 내가 다른 글에서 본 0android button.getWidth()는 값 0을 반환합니다.

기능 button.getWidth()는 항상 사람들이

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 
    placeButtonsOnScreen(); 
} 

그러나 심지어 내가 그것을 사용하고있을 때, 그것은 작동하지 않습니다를 사용 권장이 반환된다 .

private void placeButtonsOnScreen() { 

    Random r = new Random(); 

    LinearLayout layout = (LinearLayout) findViewById(R.id.ordered_buttons_layout); 

    for (int i = 0; i < NUMBER_OF_BUTTONS; i++) { 
     Button hiddenButton = buttonsArr[i]; 
     // Get random horizontal margin for the button 
     LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
       LinearLayout.LayoutParams.WRAP_CONTENT, 
       LinearLayout.LayoutParams.WRAP_CONTENT); 
     horizontalMargin = r 
       .nextInt(SCREEN_WIDTH - hiddenButton.getWidth()); 
     layoutParams.setMargins(horizontalMargin, 50, 0, 0); 
     // Add the button to the screen 
     layout.addView(hiddenButton, layoutParams); 
     Log.d("button width",String.valueOf(hiddenButton.getWidth())); 
    } 
} 

화면에서 버튼의 너비를 뺀 위치를 어떻게 잡을 수 있습니까? 바로 지금 그들은 화면의 오른쪽과 교차로에서 잘립니다.

+0

확실하지 않지만 코드는 버튼이 의미 숨겨져 있다면 그려지지 않기 때문에 너비가 없습니다. measure()와 getMeasuredWidth()를 호출 해보십시오. –

+0

사전 측정보기에 대한 좋은 답변 : http://stackoverflow.com/a/8403680/278385 – jqpubliq

답변

0

당신은 서로에 따라 RelativeLayouts을 사용하고 버튼의 위치를 ​​확인해야합니다 (물론 정렬하기로 화면의 오른쪽에 가장 가까운 하나 = 진정한 alignedToParentRight)

1
myView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 

     @Override 
     public void onGlobalLayout() { 

      myView.getViewTreeObserver().removeGlobalOnLayoutListener(this); 

      placeButtonsOnScreen(); 
     } 
    }); 
+0

myView 란 무엇입니까? 버튼? 이 코드는 어디에 써야합니까? – itaied

관련 문제