spark文本区域高度调整为内容

Posted

技术标签:

【中文标题】spark文本区域高度调整为内容【英文标题】:spark Text area height adjust to content 【发布时间】:2011-08-04 06:21:44 【问题描述】:

我想根据我动态放入的文本在动作脚本中调整我的文本区域的大小,但绝对不知道该怎么做……搜索了很多。如果它可以帮助您解决问题,这是我的代码。我想根据内容调整 msgLabel 的高度。

非常感谢 ;)。

public function createTweet(tweet:XML, lineName:String, isTweetInList:Boolean):IVisualElement
    var authorS:String = tweet.posterName;
    var tweetID:String = tweet.tweetID;

    //Main vertical group
    var vg:VGroup = new VGroup();
    vg.percentWidth = 100;
    if(!isTweetInList)
        //Add the new VGroup to the tweetTabHolder
        tweetTabHolder[tweetID+lineName] = vg;

        //Add the new tweetID to the tweet posted by an author
        if(tweetByLineByAuthor[authorS] == null)
            tweetByLineByAuthor[authorS] = new Dictionary();
        if(tweetByLineByAuthor[authorS][lineName] == null)
            tweetByLineByAuthor[authorS][lineName] = new ArrayList();
        tweetByLineByAuthor[authorS][lineName].addItem(tweetID);
    

    vg.setStyle("backgroundAlpha", 0);
    vg.paddingLeft = 20;

    var sp0:Spacer = new Spacer();
    sp0.height = 10;
    vg.addElement(sp0);

    //Tweet Content
        //Author
    var hgA:HGroup = new HGroup();
    var aSpacer:Spacer = new Spacer();
    aSpacer.width = 10;
    hgA.addElement(aSpacer);
    var authorLabel:RichText = new RichText();
    authorLabel.text = authorS;
    authorLabel.setStyle("fontSize",20);
    authorLabel.setStyle("fontWeight",FontWeight.BOLD);
    authorLabel.setStyle("color",authorColor);
    authorLabel.addEventListener("click",authorClickHandler);
    authorLabel.addEventListener(MouseEvent.MOUSE_OVER,authorFocusInHandler);
    authorLabel.addEventListener(MouseEvent.MOUSE_OUT,authorFocusOutHandler);
    hgA.addElement(authorLabel);
    if(tweet.posterName == userNameLogged || isTweetInList)
        var abs1:Spacer = new Spacer();
        abs1.width = 25;
        hgA.addElement(abs1);
        hgA.addElement(createDeleteTweetButton(tweetID,vg, isTweetInList));
        var abs2:Spacer = new Spacer();
    
    if(!isTweetInList)
        abs2.width = 4;
        hgA.addElement(abs2);
        hgA.addElement(createFavorisButton(tweetID));
    
    vg.addElement(hgA);
        //Msg
    var hgM:HGroup = new HGroup();
    var mSpacer:Spacer = new Spacer();
    mSpacer.width = 15;
    hgM.addElement(mSpacer);
    var msgLabel:TextArea = new TextArea();
    hgM.addElement(msgLabel);
    hgM.percentWidth = 100;
    msgLabel.percentWidth = 100;
    msgLabel.text = tweet.msg;
    msgLabel.setStyle("fontSize",12);
    msgLabel.setStyle("color",msgColor);
    msgLabel.editable = false;
    msgLabel.setStyle("lineBreak", "toFit");
    vg.addElement(hgM);

    //Date
    var hgD:HGroup = new HGroup();
    var dSpacer:Spacer = new Spacer();
    dSpacer.width = 10;
    hgD.addElement(dSpacer);
    var dateLabel:Label = new Label();
    dateLabel.text = tweet.postingDate.date;
    dateLabel.setStyle("fontSize",10);
    dateLabel.setStyle("color",dateColor);
    hgD.addElement(dateLabel);
    vg.addElement(hgD);

    var sp1:Spacer = new Spacer();
    sp1.height = 10;
    vg.addElement(sp1);
    var hr:HRule = new HRule();
    hr.percentWidth = 90;
    hr.x = 20;
    vg.addElement(hr);
    return vg;

【问题讨论】:

【参考方案1】:

首先,当您的应用程序显然是 Flex 时,为什么还要使用 Actionscript?您可以将混乱的代码减少 2/3。另外,最后我检查了它们都调整到它们的内容,除非你指定它们的尺寸。不管怎样,这里有一个很好的例子:

<?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">

    <fx:Script>
        <![CDATA[
            [Bindable] private var someText:String = "Enter long text here.";
        ]]>
    </fx:Script>
    <s:RichEditableText selectable="true" editable="false" text="someText" multiline="true"  />

</s:Application>

【讨论】:

问题是我不知道如何动态地制作mxml...我必须动态地创建这些视觉对象,这就是我想要动态地做它的原因。正如我所说,我在我的代码中固定了大小,我做了 msgLabel.percentWidth = 100 和周围的 VBox 相同,所以通常我做了我应该做的:)。但是谢谢你的回答,如果你能告诉我如何动态添加 mxml 那就完美了 这解决了我的问题,我定义了一个新组件并在我的 actionscript 代码中使用它。用这种语言学到了一个有趣的新概念,非常感谢! 如果你想动态地创建东西,你应该看看制作一个数据驱动的应用程序,并使用ListDataGroup 之类的东西来根据自定义项目渲染器创建项目。查一下:)

以上是关于spark文本区域高度调整为内容的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有持续回流的情况下动态调整高度的文本区域? [复制]

将分组按钮的大小调整为文本区域的大小?

可以在没有持续回流的情况下动态调整高度的文本区域吗?

根据内容自动调整文本区域的大小[重复]

如何用内容改变文本区域的高度?

创建具有自动调整大小的文本区域