我遇到的问题是,我有一个VGroup中的多个标签,需要它们包装,而不是延伸过去的容器设置宽度。我试图将关键字整合到一段动态的文本中。我无法使用mx:Text,因为我需要每个单词都是它自己的组件,允许自定义样式和鼠标点击,即使该单词是关键字也是如此。此外,标签最大线路解决方案将无法正常工作,因为我正在处理VGroup中的多个标签,并且VGroup需要包装其子标签而不是标签标签。我也无法使用TileGroup,因为它看起来不正确地将一个段落分解成一个表,查看每个单词在其自己的列/行中的组件。
我使用的解决方案是计算生成的标签中的每个字符并将其添加到变量以确定何时需要创建一个新的HGroup来保存标签并坐在VGroup中。我不得不这样做,因为我不能确定标签宽度,直到它呈现,因为它是动态生成的。这是无法完成的,因为它的渲染点对于我来说已经太晚了,无法移动所有的东西,因为用户可以看到所有这一切发生,这绝对不是所期望的效果。
下面是我用来解决这个问题的代码柜面任何人运行到这个问题:
public static function setKeyWords(someText:String, theGroup:Group, theDictionary:Array, theView:Object):void {
theGroup.removeAllElements();
var textArray:Array = someText.split(' ');
var theCount:int = 0;
var theHGroup:HGroup = new HGroup();
var breakNum:int = 40;
theHGroup.percentWidth = 100;
for(var i:int = 0, l:int = textArray.length; i < l; i++) {
theCount += textArray[i].toString().length;
if(theCount >= breakNum) {
theGroup.addElement(theHGroup);
theHGroup = new HGroup();
theHGroup.percentWidth = 100;
theCount = 0;
}
if(checkForWord(theDictionary, textArray[i].toString())) {
theCount += 1;
var theLink:Label = new Label();
theLink.text = textArray[i].toString();
theLink.setStyle("color", "0xFFFF00");
theLink.setStyle("fontWeight", "bold");
theLink.maxWidth = 580;
//theLink.includeInLayout = false;
var tmpDescrip:String = theDescription;
theLink.addEventListener(MouseEvent.CLICK, function(evt:MouseEvent):void {
showToolTip(tmpDescrip, theView, 'keywords');
});
theHGroup.addElement(theLink);
} else {
theCount += 1;
var someLabel:Label = new Label();
someLabel.maxWidth = 580;
someLabel.text = textArray[i].toString();
//someLabel.includeInLayout = false;
theHGroup.addElement(someLabel);
}
}
if(theCount > 0)
theGroup.addElement(theHGroup);
}
这可能不是这样做的最effecient的方式,但它的工作和需要一点时间来执行在我正在瞄准的Iphone上。