如何创建具有动态高度的Flex应用程序?

时间:2008-11-25 20:06:20

标签: flex actionscript-3

是否有办法允许flex应用程序在嵌入HTML包装器时具有动态高度?

我希望Flex应用程序的高度增长,不会导致垂直滚动条。

5 个答案:

答案 0 :(得分:4)

最好的方法应该是重写Application的度量方法,如:

private var _lastMeasuredHeight:int;

override protected function measure():void
{
    super.measure();
    if (measuredHeight != _lastMeasuredHeight)
    {
        _lastMeasuredHeight = measuredHeight;
        if (ExternalInterface.available)
        {
            ExternalInterface.call("setFlashHeight", measuredHeight);
        }
    }
}

此函数假定您有一个名为setFlashHeight的javascript函数,它可以接受高度(或任何您命名的)参数。一个例子是:

function setFlashHeight(newHeight){
    //assuming flashDiv is the name of the div contains flex app.
    var flashContentHolderDiv = document.getElementById('flashDiv'); 
    flashContentHolderDiv.style.height = newHeight;
}

我使用swfobject来嵌入我的flex应用程序。所以flash对象驻留在div中。如果不是;可以很容易地改变js函数来设置flash对象的高度。当您实现此解决方案时,您会注意到滚动条不起作用,因为闪存消耗该事件。但那是另一个主题......

答案 1 :(得分:3)

这是可能的。例如,请通过fi查看新的Kontain。您可以通过创建新的博客帖子并在输入字段中添加行来直接查看它。随着输入字段的大小增加,页面变得更高。

您必须通过ExternalInterface在Flash和Javascript之间进行协调。当您的Flex应用程序需要更改大小时,找到新的大小(可能通过挖掘Flex的布局引擎)并通过ExternalInterface将其抛出到Javascript函数。然后javascript可以在容器上设置新的height属性。您可能还需要在标记上设置verticalScrollPolicy =“off”,以便Flex在布局引擎运行时不显示滚动条。

答案 2 :(得分:2)

我不确定我是否完全理解这个问题,您是否试图让应用程序的大小大于浏览器的视图端口?如果是这样,那么就像@hasseg评论和@RickDT提到的那样,你可以将Application的horizo​​ntalScrollPolicy和/或verticalScrollPolicy属性设置为“off”吗?

如果您只是想确保您的应用程序随浏览器的形状和大小的变化而变化,那么请确保在最外层的应用程序标记中设置以下(或适合的值)。

percentWidth="100"
percentHeight="100"

答案 3 :(得分:0)

不幸的是,不,我认为你能做到这一点的唯一方法就是首先摆脱html包装。 HTH。

答案 4 :(得分:0)

不需要所有这些,只需将应用程序从spark更改为mx即可。这将自动显示,因为我认为火花根本不支持(我认为这是adobe的愚蠢错误)

像这样:

<mx:Application xmlns:fx="http://ns.adobe.com/mxml/2009" >

</mx:Application>

而不是:

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" >

</s:Application>

保留没有高度规格的应用程序标签“不要使用height =”100%“