Apache flex 弹性动态形状高度

Apache flex 弹性动态形状高度,apache-flex,actionscript,adobe,mxml,Apache Flex,Actionscript,Adobe,Mxml,我不确定这是否可行,有没有办法让根据元素在其中的位置设置自己的高度 例如,类似这样的事情: <mx:Form height="{submitBtn.y + submitBtn.height}"> <mx:FormItem>... </mx:FormItem> <mx:FormItem>... </mx:FormItem> <mx:FormItem>... </mx:FormItem>

我不确定这是否可行,有没有办法让
根据元素在其中的位置设置自己的高度

例如,类似这样的事情:

<mx:Form height="{submitBtn.y + submitBtn.height}">

   <mx:FormItem>... </mx:FormItem>

   <mx:FormItem>... </mx:FormItem>

   <mx:FormItem>... </mx:FormItem>

   <mx:FormItem>
       <s:Button id="submitBtn" label="Submit" /> 
   </mx:FormItem>

</mx:Form>
<mx:ViewStack id="viewStack" resizeToContent="true">
</mx:ViewStack>

... 
... 
... 
其中,根据submitBtn的y位置及其高度动态设置窗体的高度

我尝试使用Alert.show来显示这些值,结果显示
submitBtn.y=0
submitBtn.height
=21。高度听起来很合理,但我知道
submitBtn.y
不能为0,因为它低于其他几个值


是否可以动态设置表单高度?

可以。用测量方法进行测量:

private var n:Number = 0;
override protected function measure() : void {
super.measure();
    if (submitBtn) {
        var fi:FormItem = FormItem(submitBtn.parent);
        n = fi.y + fi.height;
    }
}
然后只需将高度设置为n


编辑:我更改了它以指定包含FormItem的项,而不是按钮,这是我在自己的示例代码中首先测试的。您可以获取按钮的父项,也可以为该表单项提供一个ID。但这种方法确实有效。

您的submitBtn.y将始终返回0,因为它是mx:FormItem元素中的y位置(如相对y位置)


所以我想你应该根据表单中按钮的y位置来设置表单的y位置。为什么要这样做?

查看DisplayObject的所有子级都可以使用的localToGlobal()方法。它将把你的x,y坐标转换成全局x,y坐标。您应该能够在计算中使用此选项。

我希望线程没有关闭,因为我只是遇到了与您相同的问题并找到了正确的解决方案,所以我将尝试解释

每当我的应用程序启动时,它都会读取一个文件并解析它,其中包含一些适合某些表单的信息,我会动态创建它们,而不指定任何高度或宽度

我将它们添加到viewStack中,如下所示:

<mx:Form height="{submitBtn.y + submitBtn.height}">

   <mx:FormItem>... </mx:FormItem>

   <mx:FormItem>... </mx:FormItem>

   <mx:FormItem>... </mx:FormItem>

   <mx:FormItem>
       <s:Button id="submitBtn" label="Submit" /> 
   </mx:FormItem>

</mx:Form>
<mx:ViewStack id="viewStack" resizeToContent="true">
</mx:ViewStack>

嗯,我试过了,结果总数仍然是21,这意味着它将submitBtn.y计算为0。不知道怎么了。这个表单在它自己的组件中,你认为这有什么区别吗?当然,我正在将度量代码添加到组件本身中。是的,实际上您应该测试FormItem,它是表单的子项。很抱歉,这是我首先编写和测试的内容,然后根据您的代码进行“调整”。我现在尝试了父项,并且现在给了我正确的数字,谢谢。不,我想将窗体的高度设置为y位置,而不是将其y位置设置为元素的y位置。基本上,我正在使形状尽可能高,以适应其最后一个元素。如果我能得到最后一个元素(submitBtn)的y位置,然后再加上它的高度+一些额外的空间,那么表单的高度就和需要的一样长。好的。。我想我现在明白你想要得到什么了。因此,如果为表单指定了,那么它将采用所需的高度来显示其中的所有内容(这实际上就是您要查找的,请删除表单的高度)。在您的示例中,按钮的高度为21,按钮的Y位置完全设置为0(因为是相对于按钮父级的相对位置)。