【问题标题】:HTML content inside TabNavigatorTabNavigator 中的 HTML 内容
【发布时间】:2011-10-11 19:50:27
【问题描述】:

我有一个案例,我正在动态添加 tabNavigator 选项卡,但我不知道如何为某些单词添加 HTML 样式。

我真的只需要 BOLD 或 UNDERLINE 几个字,但我无法让任何 HTML 格式在 NavigatorContent 标记内工作。

谁能帮我解决这个问题?我已经找了好几个小时了,一无所获。

这是我目前所拥有的。 (内容是从外部 XML 文件中提取的)。

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
                       xmlns:s="library://ns.adobe.com/flex/spark"
                       xmlns:mx="library://ns.adobe.com/flex/mx"
                       width="500" height="600" creationComplete="initApp()">
    <fx:Declarations>


        <!-- Place non-visual elements (e.g., services, value objects) here -->
        <s:HTTPService id="chatlist" result="resultHandler(event)"
                       url="http://localhost/FlexLiveChat/LiveChat2/chat.xml"/>



    </fx:Declarations>
    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.rpc.events.ResultEvent;

            private function initApp():void
                        {
                        chatlist.send();

                            }   
            private function resultHandler(event:ResultEvent):void
            {
                var dp:ArrayCollection = event.result.chatsession.chat as ArrayCollection;

                for(var i:int = 0; i < dp.length; i++) {
                    var t:TextField = new TextField(  );
                    t.htmlText = "This field contains <B>HTML!</B>";

                    var label:Label = new Label();
                    label.text = dp.getItemAt(i).message;

                    var context:NavigatorContent = new NavigatorContent();
                    context.label = dp.getItemAt(i).chatperson;
                    context.addElement(label);

                    tn.addChild(context);
                }
                }


        ]]>
    </fx:Script>

    <s:BorderContainer left="10" right="10" top="10" bottom="10" height="100%" borderVisible="false">

    <s:VGroup id="mainBG" x="0" y="0" width="100%" height="100%" textAlign="center">

        <mx:TabNavigator id="tn" width="100%" height="100%" color="0x323232">
            <!-- Define each panel using a VBox container. -->
            <s:NavigatorContent label="Home">
                <s:Label text="This panel is always available  \n\n container panel 1"/>    
                <mx:Text text="This is a text control."/>       
            </s:NavigatorContent>
        </mx:TabNavigator>

        <s:TextArea width="100%" height="62" textAlign="left"/>
        <s:Button label="Post Message"/>


    </s:VGroup></s:BorderContainer>
</s:WindowedApplication>

【问题讨论】:

    标签: flex4 flash-builder


    【解决方案1】:

    您可以使用文本流:

    <?xml version="1.0" encoding="utf-8"?>
    <s:VGroup xmlns:fx="http://ns.adobe.com/mxml/2009"
              xmlns:s="library://ns.adobe.com/flex/spark"
              xmlns:mx="library://ns.adobe.com/flex/mx"
              width="100%"
              height="100%"
              gap="0">
    
        <fx:Script>
            <![CDATA[
                import flashx.textLayout.conversion.TextConverter;
                import flashx.textLayout.elements.TextFlow;
    
                private const text:String =
                    "<b>bold text</b><br />" +
                    "<br />" +
                    "<u>underlined text</u><br />" +
                    "<br />" +
                    "<ul>" +
                    "<li>list item<br /></li>" +
                    "<li>list item<br /></li>" +
                    "<li>list item<br /></li>" +
                    "</ul>" +
                    "<a href='http://www.google.com'>a link</a><br />" +
                    "<br />";
            ]]>
        </fx:Script>
    
        <s:RichEditableText editable="false"
                            selectable="true"
                            textFlow="{TextConverter.importToFlow(text, TextConverter.TEXT_FIELD_HTML_FORMAT)}"
                            buttonMode="true"
                            width="100%"
                            height="100%" />
    
    </s:VGroup>
    

    根据您的评论,您应该将导航器内容视图抽象为一个组件。

    根据您的示例:

    您的主应用程序

    <?xml version="1.0" encoding="utf-8"?>
    <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
                           xmlns:s="library://ns.adobe.com/flex/spark"
                           xmlns:mx="library://ns.adobe.com/flex/mx"
                           width="500"
                           height="600"
                           creationComplete="initApp()">
    
    
        <fx:Declarations>
            <s:HTTPService id="chatlist"
                           result="resultHandler(event)"
                           url="http://localhost/FlexLiveChat/LiveChat2/chat.xml" />
        </fx:Declarations>
    
    
        <fx:Script>
            <![CDATA[
                import mx.collections.ArrayCollection;
                import mx.rpc.events.ResultEvent;
    
                private function initApp():void
                {
                    chatlist.send();
                }
    
                private function resultHandler(event:ResultEvent):void
                {
                    var dp:ArrayCollection = event.result.chatsession.chat as ArrayCollection;
    
                    for (var i:int = 0; i < dp.length; i++)
                    {
                        var htmlNavigatorContent:HtmlNavigatorContent = new HtmlNavigatorContent();
    
                        // attach result you want in the html text, 
                        // including other properties.
                        htmlNavigatorContent.htmlText = "This field contains <B>HTML!</B>";
    
                        tn.addChild(htmlNavigatorContent);
                    }
                }
            ]]>
        </fx:Script>
    
        <s:BorderContainer left="10"
                           right="10"
                           top="10"
                           bottom="10"
                           height="100%"
                           borderVisible="false">
    
            <s:VGroup id="mainBG"
                      x="0"
                      y="0"
                      width="100%"
                      height="100%"
                      textAlign="center">
    
                <mx:TabNavigator id="tn"
                                 width="100%"
                                 height="100%"
                                 color="0x323232">
                    <!-- Define each panel using a VBox container. -->
                    <s:NavigatorContent label="Home">
                        <s:Label text="This panel is always available  \n\n container panel 1" />
                        <mx:Text text="This is a text control." />
                    </s:NavigatorContent>
                </mx:TabNavigator>
    
                <s:TextArea width="100%"
                            height="62"
                            textAlign="left" />
                <s:Button label="Post Message" />
    
    
            </s:VGroup>
        </s:BorderContainer>
    </s:WindowedApplication>
    

    创建一个名为:HtmlNavigatorContent 的 MXML 组件

    <?xml version="1.0" encoding="utf-8"?>
    <s:NavigatorContent xmlns:fx="http://ns.adobe.com/mxml/2009"
                        xmlns:s="library://ns.adobe.com/flex/spark"
                        xmlns:mx="library://ns.adobe.com/flex/mx"
                        width="100%"
                        height="100%">
    
        <fx:Script>
            <![CDATA[
                import flashx.textLayout.conversion.TextConverter;
                import flashx.textLayout.elements.TextFlow;
    
                [Bindable]
                public var htmlText:String;
            ]]>
        </fx:Script>
    
        <s:RichEditableText editable="false"
                            selectable="true"
                            textFlow="{TextConverter.importToFlow(htmlText, TextConverter.TEXT_FIELD_HTML_FORMAT)}"
                            buttonMode="true"
                            width="100%"
                            height="100%" />
    
    </s:NavigatorContent>
    

    【讨论】:

    • 谢谢。这有点帮助。我现在可以将 HTML 格式的文本放入手动创建的选项卡中。但我仍然无法弄清楚如何动态地放入它。我的标签都是动态创建的。我将如何做到这一点?
    • 根据您提供的内容,有一个扩展示例。我不知道您的 localhost 服务返回什么,因此您需要将 XML 结果应用到 HtmlNavigatorContent 组件的 htmlText 属性。
    猜你喜欢
    • 2019-02-26
    • 2011-02-06
    • 2018-02-01
    • 1970-01-01
    • 2018-04-07
    • 2012-06-09
    • 2012-09-29
    • 2018-12-04
    • 2013-11-29
    相关资源
    最近更新 更多