我动态创建了一堆文本字段,其数量取决于xml输入。文本字段需要启用按钮,所以我认为最简单的解决方案是将它们放在movieclip和buttonMode中。
层次结构如下所示:main(扩展MovieClip)->klankoefening(一个Movie Clip)->Textfieldparent(一个电影剪辑)->Textfield
我有一个变量maxw,它包含最大文本字段的宽度,我希望我所有的Textfieldparents都有这个宽度。
我试着这样做:
//generate textfields
keuzes = new XMLList(lijstOpties.categorie.(@cat == catname));
var nrs:int = keuzes.keuze.length(); //aantal keuzemogelijkheden
var maxw:int = 0; //grootste breedte tf, nodig voor bepalen breedte knoppen
for (var nr:int = 0; nr < nrs; nr++) {
var tf:TextField = createTextfield(werkfmt);
tf.text = keuzes.keuze[nr].toString();
tf.autoSize = "center";
tf.background = true;
tf.backgroundColor = 0xffcc33;
tf.border = true;
tf.borderColor = 0x000000;
tf.name = "keuzetf";
tf.selectable = false;
tf.x = 0;
tf.y = 0;
if (tf.width > maxw) {maxw = tf.width;}
var tfcontainer:MovieClip = new MovieClip();
tfcontainer.buttonMode = true;
tfcontainer.name = keuzes.keuze[nr].toString();
tfcontainer.addChild(tf);
klankoefening.addChildAt(tfcontainer,nr);
}
for (var an:int = 0; an < 3; an++) {
var mcs:MovieClip = klankoefening.getChildAt(an) as MovieClip;
mcs.width = maxw;
trace ("mcs " + mcs.width);
var mtf:TextField = mcs.getChildAt(0) as TextField;
trace ("mtf " + mtf.text);
}
跟踪结果是
mcs 32.05
mcs 33
mcs 21.25
我觉得这很奇怪,因为我在第二个循环中指出,所有Textfieldparents的宽度都应该设置为maxw。发生了什么?
考虑绘制所需宽度和高度的底层Rectangle
。您可以使用mcs.graphics
来执行此操作。诀窍是,DisplayObjectContainer
的宽度是经过计算的特性,改变它可能会导致比例的改变。比方说,一个MC有两个形状作为chillen,一个在(1000,0),另一个在在(0,0),并且两者的宽度都是10——该MC的合成宽度将是1010。因此,与其改变宽度,不如在MC上画一个矩形来模拟其变化
mcs.graphics.clear();
mcs.graphics.lineStyle(0,0,0);
mcs.graphics.beginFill(0x808080,0); // bogus filled rect, to capture events
mcs.graphics.drawRect(0,0,maxw,maxh); // height is needed too
mcs.graphics.endFill();
在仔细思考了您的问题后,我认为您的问题是添加文本的按钮的宽度完全由TextField定义,并且因为您将文本设置为autoSize,所以它会恢复到原来的宽度。
您需要做的是在tfContainer mc中创建一个透明矩形,设置tfContainer的宽度,然后将文本添加到按钮中,以使宽度更能指示您需要的内容,并允许轻松单击按钮。