【问题标题】:Spark TextArea or RichText autosizeSpark TextArea 或 RichText 自动调整大小
【发布时间】:2011-04-15 04:29:07
【问题描述】:

我已经对这个主题进行了大量搜索,但我发现的内容似乎已经过时或似乎不起作用。

过去使用 TextFields,您可以将 TextField 设置为某个宽度,将 wordWrap 设置为 true,您最终会得到一个根据您添加的文本改变高度的文本字段。

现在我正在尝试使用 Spark TextArea 或 RichText 来执行此操作。

我试过这个 HeightInLines = NAN,但这似乎已经过时了。

我也试过这个套路:

var totalHeight:uint = 10;
this.validateNow();
var noOfLines:int = this.mx_internal::getTextField().numLines;
for (var i:int = 0; i < noOfLines; i++) 
{
     var textLineHeight:int = 
                     this.mx_internal::getTextField().getLineMetrics(i).height;
     totalHeight += textLineHeight;
}
this.height = totalHeight;

但 mx_internal 不在 Spark 组件中。

我正在尝试使用 AS3,而不是 MXML。如果有人有任何建议或链接可以帮助我使用 AS3 解决这个问题,我将不胜感激。

【问题讨论】:

    标签: apache-flex flex4 textarea richtext


    【解决方案1】:

    整个下午都在为此苦苦挣扎。但是,如果您设置它的宽度而未定义它的高度,RichEditableText 组件似乎会自动调整大小。

    【讨论】:

    • 非常感谢罗斯,我遇到了这个问题,您的解决方案效果很好!
    【解决方案2】:

    这很好用:

    <?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">
        <s:TextArea updateComplete="event.currentTarget.heightInLines = NaN" />
    </s:Application>
    

    在 cmets here 中找到。您可以在 ActionScript 中使用相同的 updateComplete 事件执行相同操作。

    【讨论】:

    • oopss.... 在您链接到的示例中,这是用于在输入文本时增加文本区域。我正在谈论构建一个 textArea,用文本填充它并最终得到一个完整大小的文本区域以及一个高度数字,以便我可以调整文本字段下方的项目。
    【解决方案3】:

    这是我在 ItemRenderer 中使用时设置 TextArea 的高度以适应其内容的方式(例如,对于 List 组件):

    private function onUpdateComplete( e: Event ): void
    {
        // autoresize the text area
        if ( theText ) {
          var actualNumOfLines: int = theText.textFlow.flowComposer.numLines;
          theText.heightInLines = actualNumOfLines; 
    
          invalidateSize();
        }
    }
    

    ItemRenderer 必须设置此属性:

    <s:ItemRenderer ... updateComplete="onUpdateComplete(event)>
    

    也许 updateComplete 事件不是自动调整大小操作的最佳触发器,但对我来说效果很好。

    【讨论】:

      【解决方案4】:

      您可以从 TextArea 的皮肤中移除滚动条,它会变为可自动调整大小。您可以在这里下载完成的皮肤:http://www.yumasoft.com/node/126

      【讨论】:

        【解决方案5】:

        这是火花文本区域的解决方案(它的工作原理与 mx 文本区域一样):

        var ta_height:int;
        for(var i:int=0; i < StyleableTextField(myTextArea.textDisplay).numLines; i++) {
                ta_height += StyleableTextField(myTextArea.textDisplay).getLineMetrics(i).height;
        }
        myTextArea.height = ta_height;
        

        【讨论】:

          【解决方案6】:

          这似乎对我有用:

          <s:TextArea id="testTextArea"
                      change="testTextArea_changeHandler(event)" 
                      updateComplete="testTextArea_updateCompleteHandler(event)"/>
          
          <fx:Script>
              <![CDATA[
                  protected function testTextArea_changeHandler(event:TextOperationEvent):void
                  {
                      testTextArea.height = RichEditableText(testTextArea.textDisplay).contentHeight + 2;
                  }
          
                  protected function testTextArea_updateCompleteHandler(event:FlexEvent):void
                  {
                      testTextArea.height = RichEditableText(testTextArea.textDisplay).contentHeight + 2;
                  }
              ]]>
          </fx:Script>
          

          【讨论】:

            【解决方案7】:

            一直在敲打 s:TextArea,然后发现这可以完成工作:

            <s:RichEditableText id="txtArea" left="0" right="0" backgroundColor="#F7F2F2"
                                change="textChanged()" />
            

            【讨论】:

            • 你没有包含 textChanged() 函数。
            猜你喜欢
            • 1970-01-01
            • 2021-11-25
            • 2013-06-21
            • 2011-09-22
            • 2019-06-27
            • 1970-01-01
            • 1970-01-01
            • 2022-10-13
            • 1970-01-01
            相关资源
            最近更新 更多