2011-03-18 11 views
0

동적 추가 예를 들어, (각 어린이가 같은 크기가 TileList 구성 제약, GridList 성능이 떨어집니다)내가 동적으로 캔버스처럼 컨테이너에 구성 요소를 추가 할 구성 요소

I 버튼을 클릭하면, 나는 희망
<mx:Canvas id="myHolder" width="600" height="550"> 

</mx:Canvas> 
<mx:Button label="Add Button" click="addButton()"/> 

구성 요소를 추가하고 (구성 요소가 무엇이든 각 구성 요소의 크기가 다를지라도) 추가 된 모든 하위 요소의 너비가 myHolder보다 큰 경우 새 줄을 새 줄에서 시작하고 높이를 myHolder에서 늘릴 수 있기를 바랍니다. 같은 시간에. (사용자 정의 코드 레이아웃이 더 좋습니다.)

+0

HBox는 이런 식으로 작동하지 않습니다. 그것은 가로 상자 (이름에서 알 수 있듯이)이며 한 줄에 아이들을 꾸린다. 새 줄을 시작하는 것은 TileList라고합니다 (한 종류의 항목에 적합 함). 항목이 다른 경우 GridLayout을 살펴 보거나 캔버스에 사용자 정의 코드로 배치하십시오. – alxx

+0

정확하게, 아이템을 다른 크기로 표시하고 싶습니다. 캔버스는 괜찮지 만 사용자 정의 코드로 레이아웃하는 법입니다. – jason

답변

1

당신이 어디서든 자신의 xy 속성을 사용하여 구성 요소를 배치하는 완전한 자유를 가지고, 그래서 거기 이 고양이를 다듬는 많은 방법. 당신이 행을 필요로하기 때문에, 방법 중 하나는 (테스트하지) 할 수있다 : 이것은 캔버스 고정 너비 및 레이아웃에 따라 높이를 설정 한 가정

//inside of your Canvas-based component 
private function updateChildrenPositions():void 
{ 
    var rowY:Number = 0; 
    var rowWidth:Number = 0; 
    var rowHeight:Number = 0; 
    for (var i:int = 0, total:int = numChildren; i < total; i++) 
    { 
     var child:DisplayObject = getChildAt(i); 
     if (rowWidth + child.width > width) 
     { 
      //child will cause overflow, start next row 
      rowY += rowHeight; 
      rowWidth = 0; 
      rowHeight = 0; 
     } 
     rowWidth += child.width; 
     child.x = rowWidth; 
     child.y = rowY; 
     if (child.height > rowHeight) rowHeight = child.height; //accumulating max height 
    } 
    height = rowY + rowHeight; 
} 

. 패딩과 갭을 나중에 추가 할 수 있습니다. 좋은 연습입니다.

+0

답변을 주셔서 감사합니다. 그것은 거의 시간을 잘 작동하지만 때로는 각 행의 마지막 자식이 잘립니다 (horizontalScrollPolicy = "off"로 설정). – jason

1

원하는 기능을 얻으려면 사용하지 않을 것입니다. HBox. alxx가 제안한대로 TileList이이 상황에 더 적합합니다. 여기

당신을 얻기 위해 TileList를 사용하여 몇 가지 예 시작입니다 캔버스에

http://blog.flexexamples.com/category/halo/tilelist/

http://learn.adobe.com/wiki/display/Flex/TileList

+0

하지만 TileList의 각 하위가 동일한 너비와 높이를 갖습니다. 각 자식이 다른 크기를 갖는 경우는 무엇입니까 – jason

+0

@ jason, 얼마나 더 크거나 작습니까? 크기 차이가 꽤 큽니까? –

+0

내 구성 요소는 레이블 구성 요소와 아이콘 구성 요소로 구성되어 있지만 레이블의 텍스트가 다르거 나, 일부는 매우 길거나, 일부는 짧아서 어떻게 처리 할 수 ​​있습니까? 너는 어떤 생각을 가지고 있니? – jason

관련 문제