またひとつやらかしてくれました。
問題発生
コンテナに沿って一文字ずつ文字を表示したかったため、TextFlowをBreakOppotunity.ANYに設定していたのですが、TextConverter.importToFlow()で読み込んだTLF Markupの<br/>が効かないという事象が発生しました。BreakOppotunity.AUTOに戻すと効きます。BreakOppotunity.AUTOにしておかないとたとえ<br/>タグ(内部的には改行コード)であろうと改行してくれないようです。
なお、発生した環境は MacOSX Flex4.6/Air3.1
解決策
TextConverter.importToFlow()は<br/>を見つけると<span>\u2028</span>という形式に変換するようです。直前までのspanを一度区切って、一個専用のspan要素を作ります。
そこで、importToFlow()が返したTextFlowの子要素を再帰的に辿り、<br/>から変換されたspan要素のbreakOppotunityだけをBreakOppotunity.AUTOに書き換えることで問題を解決することができました。
private function fixLineBreak(elem:FlowGroupElement):void {
var num:int = elem.numChildren;
for ( var i:int = 0; i < num; i++ ) {
var child:FlowElement = elem.getChildAt(i);
if ( child is SpanElement ) {
var span:SpanElement = SpanElement(child);
if ( span.text == "\u2028" ) {
span.breakOpportunity = BreakOpportunity.AUTO;
}
}
if ( child is FlowGroupElement ) {
fixLineBreak(FlowGroupElement(child));
}
}
}
0 件のコメント:
コメントを投稿