2

この問題はとても単純に思えるので、私は気が狂いそうになります。コードで作成されたテキスト フィールドにテキスト フォーマットを適用しようとしていますが、テキストが変更されてもテキスト フィールドにフォーマットが適用されたままになります。次のコードは、未加工の AS3 で期待どおりに機能します。これらの例をできるだけ単純化するために分解しました。

package
{
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.text.TextFormat;

    public class Testing extends Sprite
    {
        public function Testing()
        {
            var tf:TextField = new TextField();
            addChild(tf);
            tf.border = true;

            var tfor:TextFormat = new TextFormat();
            tfor.align = 'right';
            tfor.size = 30;

            tf.defaultTextFormat = tfor;

            tf.text = 'Testing';

        }
    }
}

ただし、Flex の同様のコードは同じように動作しません。次のコードでは、テキストが正しくフォーマットされません。

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
           creationComplete="_create(event)">
    <fx:Script>
        <![CDATA[
            import mx.core.UITextField;
            import mx.events.FlexEvent;

            protected function _create(event:FlexEvent):void
            {
                var tf:UITextField = new UITextField();
                ui.addChild(tf);
                tf.border = true;

                var tfor:TextFormat = new TextFormat();
                tfor.align = 'right';
                tfor.size = 30;

                tf.defaultTextFormat = tfor;

                tf.text = 'Testing';            
            }

        ]]>
    </fx:Script>

    <mx:UIComponent id="ui" width="100%" height="100%" />

</s:Application>

Flex コンポーネントをテキスト フィールドとして使用し、その上に書式を貼り付けることができることはわかっていますが、このコードは以前に作成したコードとうまく連携させる必要があります。事前にご協力いただきありがとうございます。

4

1 に答える 1

1

以下のコードが役に立ちます: - UIComponent に追加する代わりに、SpriteVisualElement に追加すると機能します。

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
               creationComplete="_create(event)">
    <fx:Script>
        <![CDATA[
            import mx.core.UITextField;
            import mx.events.FlexEvent;

            protected function _create(event:FlexEvent):void
            {
                var tf:UITextField = new UITextField();
                ui.addChild(tf);
                tf.border = true;

                var tfor:TextFormat = new TextFormat();
                tfor.align = 'right';
                tfor.size = 30;

                tf.defaultTextFormat = tfor;

                tf.text = 'Testing';            
            }

        ]]>
    </fx:Script>
    <s:SpriteVisualElement id="ui" width="100%" height="100%" />

</s:Application>
于 2012-10-23T04:37:18.660 に答える