2014-04-06 1 views
0

하나의 가로형 LinearLayout에있는 모든 버튼을 가장 긴 텍스트가 포함 된 버튼 하나를 기준으로 동일한 폭으로 만들려고합니다.
세로 LinearLayout의 모든 버튼을 동일한 폭으로 만들기

내가 시도한 것은 레이아웃의 모든 버튼을 통과하여이 크기로 설정하는 것입니다. 이것은, 그러나, 크기가 모든 버튼의 크기 설정되는 세트 않습니다

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

    for(int i = 0;i < layout.getChildCount();i++){ 
     View v = layout.getChildAt(i); 
     if(v instanceof Button){ 
      if(!(v.getId() == R.id.widestButton)){ 
       ((Button) v).setWidth(findViewById(R.id.widestButton).getWidth()); 
      } 
     } 
    } 

widestButton의 크기, 그것의 그것의 약 40 % 이하이다.

어떻게하면됩니까?

+0

문제를 해결 한 경우 솔루션에 답변을 게시하고 수락하십시오. –

+0

이것은 내가 시도한 것이다. 저에게 알려주세요 : 명성이 10 명 미만인 사용자는 요청한 후 8 시간 동안 자신의 질문에 답변 할 수 없습니다. 2014 년 4 월 7 일 4시 11 분 28 초에 대답 할 수 있습니다. 그 때까지는 의견을 사용하거나 대신 질문을 편집하십시오. – ThomasK

답변

0

나는 직접 답변을 찾았으며 아마 인터넷 검색으로 찾을 수있었습니다.

문제는, 나는이 코드를 Activity oncreate에서 호출하고있었습니다. 이 시점에서 버튼의 크기는 아직 계산되지 않았습니다.

그래서 ViewTreeObserver를 발견했습니다. 레이아웃로드가 완료되면 호출 할 리스너를 추가 할 수 있습니다. 내가 지금 사용하고있는 코드는 다음과 같습니다.

final LinearLayout layout = (LinearLayout) findViewById(R.id.buttonLayout); 
    ViewTreeObserver vto = layout.getViewTreeObserver(); 
    vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      layout.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
      for(int i = 0;i < layout.getChildCount();i++){ 
       View v = layout.getChildAt(i); 
       if(v instanceof Button){ 
        if(!(v.getId() == R.id.widestButton)){ 
         ((Button) v).setWidth(findViewById(R.id.widestButton).getWidth()); 
        } 
       } 
      } 
     } 
    }); 

잘 작동합니다.