我遇到的问题是我希望出现多个 TextField,而我只看到一个出现。我已将其范围缩小到此代码。当我添加 List 元素时,我看到一个空矩形,下面有一个与我预期的大小完全相同的矩形。我看到的问题是 TextField 只出现在第二个矩形中。如果我添加三个元素,则只有最后一个元素是可视化的。
下面的代码获取一个 DisplayObject 列表(当前是两个 TextField),遍历该列表,并为每个创建一个容器 Sprite。每个容器的 Sprite 都被每个 DisplayObject 高度的高度偏移,有效地创建了一个视觉列表。如果相同的 TextField 在列表中使用了两次或更多次,则仅在最后一个元素中绘制 TextField。每个容器 Sprite 都包含一个边界框以指示它存在。
package
{
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.geom.Rectangle;
import flash.text.AntiAliasType;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
public class List extends Sprite
{
private var data:Array=new Array;
private var label:TextField= new TextField();
public function List()
{
super();
label.selectable=true;
label.autoSize = TextFieldAutoSize.LEFT;
label.antiAliasType = AntiAliasType.ADVANCED;
label.text = "Testing";
data.push(label);
data.push(label);
}
public function renderList():void{
var height:int=0;
for (var i:int=0; i< data.length; i++){
//get current sprite in list
var current:DisplayObject=data[i];
//create new sprite to contain element of array
var listItem:Sprite=new Sprite;
listItem.addChild(current);
//draw bounding rectangle for reference
var rect:Rectangle=current.getBounds(this);
listItem.graphics.lineStyle(1, 0x000000);
listItem.graphics.beginFill(0xFFFFFF);
listItem.graphics.drawRect(rect.x, rect.y, rect.width, rect.height);
listItem.graphics.endFill();
//set height corresponding to bounds height
listItem.y=height;
//calculate height for next item
height=height + rect.height;
//add new list item
addChild(listItem);
}
}
}
}