1

ドロップされたイニシャル機能をFlexアプリケーションに実装しようとしています。Text Layout Frameworkはフローティングをサポートしていないため、既知の唯一の解決策は、同じテキストフローを表示して、相互にリンクされる追加のコンテナーを作成することです。これらのコンテナの幅と位置は、フロートのふりをするように設定する必要があります。

ドロップされたイニシャルに同じソリューションを使用しています。基本的に、3つのコンテナを作成しています。1つは最初の文字(テキストフローの最初の文字)用、もう1つは浮かんでいるテキスト用、3つ目はこれら2つの下にテキストを表示するためのものです。これらのコンテナはすべて、1つのテキストフローを共有します。

コントローラにテキストフローから1文字だけを表示させ、それに応じてサイズを変更することで大きな問題が発生します。これにより、不要な追加スペースが不要になり、テキストが追加されなくなります。

ContainerController.getContentBounds()を使用すると、実際にレンダリングされた文字の高さ/幅ではなく、文字のスプライト全体のサイズ(上昇/下降の空の部分を含む)が返されます。textFlow.flowComposer.getLineAt(0).getTextLine()。getAtomBounds(0)を使用していますが、それでも正しくないと思います。また、このサイズのコンテナを設定しても、特に大きなフォントの場合は、追加のテキストが表示されることがあります。画面を参照してください:

代替テキストhttp://img97.imageshack.us/img97/6105/tlfissue.png

また、幅をcontentBoundsよりもわずか1px小さく設定すると、物事がおかしくなり、コンテナが移動したり、大きなマージンを持って配置されたりします。

これをどのように解決すればよいですか?TLF / Playerのバグですか?どうにかして直せますか?文字のサイズを検出できますか、または1文字だけに収まるようにcontainercontrollerを自動サイズ設定できますか?

4

1 に答える 1

0

columnBreakAfter を BreakStyle.ALWAYS に設定する必要があります。これは、単一の文字が ParagraphElement 内の独自の SpanElement にある必要があることを意味します。

例:

var p:ParagraphElement = new ParagraphElement();
p.columnBreakAfter = BreakStyle.ALWAYS; //Forces a break in the container

var span:SpanElement = new SpanElement();
span.text = "A";

p.addChild(span);
于 2012-10-05T22:52:50.763 に答える