运行时将Flex组件宽度设置为100%?

9
如果我通过MXML创建一个输入框,我可以将宽度设置为100%。但是我似乎不能通过ActionScript在运行时实现这一点。
以下代码有效:
<mx:TextInput ... width="100%" />

这段代码无法编译,因为宽度是一个数字而不是字符串:

var textinp:TextInput = new TextInput();
someContainer.addChild(textinp);
textinp.width = "100%"

如何通过 ActionScript 在运行时将组件的大小设置为 100%

4个回答

23
你只需要使用percentWidth属性,而不是width属性。

所以,在你的代码中,第三行应该是:
textinp.percentWidth = 100;

这也曾经让我遇到了困难。


谢谢,我知道一定是某些简单的东西。我保证下次会更仔细地研究文档,但有时容易忽略从基本 UI 类继承的内容。 - davr

10

如果你想稍后将同一组件切换回基于像素的宽度,以下是你需要做的:

textinp.percentWidth = NaN;

3

以上答案是正确的,但我不能评论它,因为我对SO还太新了。

当您想要将此功能添加到自定义组件时,可以执行以下操作:

[PercentProxy("percentMultiplier")]
public function set multiplier(value:Number):void
{
  _multiplier = value;
  invalidSomethingOrDoSomething();
}

public function set percentMultiplier(value:Number):void
{
  multiplier = value / 100;
}

当你想要设置宽度时,容器子类会寻找“percentWidth”,并不会检查元数据,因此不要将其命名为“widthInPercent”或其他名称,即使你可以这么做。

1
这是答案:
var textinp:TextInput = new TextInput();
someContainer.addChild(textinp);
textinp.percentWidth = 100;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接