使用mx时的Flex自动换行问题:当长文本没有空格时,AdvancedDataGrid itemRenderer中的文本

时间:2012-03-09 23:21:53

标签: flex actionscript mxml word-wrap

我在Flex 3中使用AdvancedDataGrid。我在网格上设置variableRowHeight =“true”,在列上设置wordWrap =“true”。列使用包含HBox中的mx:Text组件的itemRenderer,以便我可以使用HTML文本。

一切都很棒,我的文字正在包装,除非我有一个没有空格的长字符串。在这种情况下,根本不包装。相反,会出现一个完全遮盖文本的滚动条,因为它不会扩展单元格的高度以为其提供空间。有没有办法强迫Flex打破像这样的长字符串,或者某种方式我可以做一个解决方法来获得类似的行为?我知道mx:TextArea即使没有空格也可以破坏HTML文本,所以我不确定为什么它也不能在这里完成。

以下是我的代码:

<mx:AdvancedDataGrid width="100%" variableRowHeight="true">
    <mx:columns>
        <mx:AdvancedDataGridColumn headerText="A" wordWrap="true">
            <mx:itemRenderer>
                <mx:Component>
                    <mx:HBox width="100%">
                        <mx:Text htmlText="{data.a}"/>
                    </mx:HBox>
                </mx:Component>
            </mx:itemRenderer>
        </mx:AdvancedDataGridColumn>
        <mx:AdvancedDataGridColumn headerText="B" wordWrap="true">
            <mx:itemRenderer>
                <mx:Component>
                    <mx:HBox width="100%">
                        <mx:Text htmlText="{data.b}"/>
                    </mx:HBox>
                </mx:Component>
            </mx:itemRenderer>
        </mx:AdvancedDataGridColumn>
    </mx:columns>
</mx:AdvancedDataGrid>

我尝试添加一个不可见的mx:TextArea组件,除了当mx:Text宽度大于mx:HBox宽度时,在这种情况下我让它可见并隐藏mx:Text(在重写的mx中: HBox updateDisplayList或measure方法)。这种工作,但在网格中上下滚动会导致它混乱,行高不正确。代码如下:

<mx:AdvancedDataGrid width="100%" variableRowHeight="true">
    <mx:columns>
        <mx:AdvancedDataGridColumn headerText="A" wordWrap="true">
            <mx:itemRenderer>
                <mx:Component>
                    <mx:HBox width="100%">
                        <mx:Script>
                            <![CDATA[
                            override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
                                super.updateDisplayList(unscaledWidth, unscaledHeight);

                                if (this.width > 0 && text.width > this.width) {
                                    text.visible = false;
                                    text.includeInLayout = false;
                                    textArea.visible = true;
                                    textArea.includeInLayout = true;
                                } else {
                                    text.visible = true;
                                    text.includeInLayout = true;
                                    textArea.visible = false;
                                    textArea.includeInLayout = false;
                                }
                            }
                            ]]>
                        </mx:Script>
                        <mx:Text id="text" htmlText="{data.a}"/>
                        <mx:TextArea
                            id="textArea"
                            htmlText="{data.a}"
                            visible="false"
                            includeInLayout="false"
                            width="100%"
                            editable="false"
                            paddingLeft="0"
                            borderStyle="none"/>
                    </mx:HBox>
                </mx:Component>
            </mx:itemRenderer>
        </mx:AdvancedDataGridColumn>
    </mx:columns>
</mx:AdvancedDataGrid>

有人有什么想法吗?

0 个答案:

没有答案