Apache flex Flex:Label.addChild()不工作?
我想制作一个标签,上面有一个小标题,例如,标签上写着$1000,上面有一个小零售价或我们的价格。我正在尝试将标题标签添加到主标签的显示列表中。我没有收到任何错误,但是标题没有显示出来。我也考虑了rawChildren,但显然标签并没有rawChildren属性 这是我的密码:Apache flex Flex:Label.addChild()不工作?,apache-flex,Apache Flex,我想制作一个标签,上面有一个小标题,例如,标签上写着$1000,上面有一个小零售价或我们的价格。我正在尝试将标题标签添加到主标签的显示列表中。我没有收到任何错误,但是标题没有显示出来。我也考虑了rawChildren,但显然标签并没有rawChildren属性 这是我的密码: package { import mx.controls.Label; public class PriceLabel extends StrikeThroughLabel //<-- exnten
package
{
import mx.controls.Label;
public class PriceLabel extends StrikeThroughLabel //<-- exntension of label to add strike
{
private var _title:Label;
public function PriceLabel()
{
super();
}
[Bindable]
public function set title(s:String):void
{
if(_title == null)
{
_title = new Label();
addChild(_title);
this.alpha = .2;
}
_title.text = s;
}
public function get title():String
{
var s:String
if(_title != null)
{
s = _title.text;
}
return s;
}
}
}
包
{
导入mx.controls.Label;
公共类PriceLabel扩展了StrikethrawLabel//为什么不创建一个包含两个标签作为其子项的自定义组件,而不是尝试在标签上添加一个子项呢?这让我感觉更干净,因为将子项添加到这样的内置组件似乎不正确。如果将子项添加到一个非容器的Flex组件中r、 然后您必须手动管理这些子对象的大小和位置。容器为您做了很多这方面的工作
以下是您应该做的:
将子标签的创建移动到createChildren()
函数的覆盖中
在重写commitProperties()
函数中设置子标签的text
属性。您的title
getter和setter应该将该值保存在\u title
变量中,以便稍后在commitProperties()
中用于赋值。这实际上对性能很重要
覆盖measure()
函数,并将measuredWidth
和measuredHeight
更新为主标签及其子标签的最大宽度和高度值
覆盖子标签上的updateDisplayList()
并使用setActualSize()
将其设置为所需的宽度和高度
这看起来可能需要做很多工作,但就最佳实践而言,这是构建自定义组件的方式。Adobe的Flex团队花费了大量时间来最大限度地提高性能,这就是为什么事情会在几个步骤中发生
根据你的要求,我会创建一个UIComponent的子类,子类中有两个标签或UITextFields,每个标签或UITextFields都有各自的属性
顺便说一下,rawChildren
属性仅在容器上可用。它的存在是为了您可以添加“chrome”一个不属于容器子布局算法的容器。例如,面板有一个标题栏和一个边框,不受垂直/水平/绝对布局选项的影响。我考虑过这一点,但我喜欢标签的大小如何自动调整到它自己的文本,不确定如何制作这样的画布?有办法吗?当然,只是简单而已将画布的大小设置为标签的大小。在定义组件时,为了在正确的时间设置大小,您需要覆盖一个回调,但我记不起它是哪种方法。Flex文档应该能够告诉您。非常感谢您的深入回答!