Проблема, с которой я столкнулся, заключалась в том, что у меня было несколько ярлыков в VGroup, и мне нужно было их обернуть вместо того, чтобы простираться за ширину набора контейнеров. Я пытался интегрировать ключевые слова в динамический абзац текста. Я не мог использовать mx: Text, потому что мне нужно, чтобы каждое слово было отдельным компонентом, который позволял настраивать стили, плюс щелчок мышью, даже если слово было ключевым словом. Также решение для меток max lines не будет работать, потому что я имею дело с несколькими метками в 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);
}
Возможно, это не самый эффективный способ сделать это, но он работает и занимает мало времени для выполнения на Iphone, к чему я стремился.