我正在为列表创建一个自定义项目渲染器,以便我可以使用多个 StyleTextFields 拥有多列数据。
我正在研究 MXML 和 Actionscript 的混合体(因为 StyleableTextField 只能通过 Actionscript 创建)。
但是,我在让宽度对齐时遇到问题。我用来设置宽度的 Actionscript 如下:
var id:StyleableTextField = StyleableTextField(createInFontContext(StyleableTextField));
id.width = (itemContainer.width * 30/100);
id.htmlText = "Text Here";
var desc:StyleableTextField = StyleableTextField(createInFontContext(StyleableTextField));
desc.width = (itemContainer.width * 70/100);
desc.htmlText = "Much longer text description goes here";
如您所见,我正在尝试根据容器的宽度设置宽度(如下所示)。
我也尝试过设置 percentWidth 和显式宽度,但列似乎仍然具有不同的宽度。
我的 MXML 看起来像这样:
<s:Group width="100%">
<s:HGroup id="itemContainer" verticalAlign="middle" paddingLeft="10" paddingRight="10" paddingTop="10" paddingBottom="10" width="100%" gap="10">
</s:HGroup>
</s:Group>
特别是 id 列似乎不愿意大于它的预置宽度。可以是多行的 desc 列效果更好,但仍然不能在所有行中保持单一宽度。
更新:
尝试 Alex 的建议后,我现在有了以下 ActionScript 代码。虽然它似乎没有做太多。
override protected function updateDisplayList(unscaledWidth : Number, unscaledHeight : Number) : void {
if (idno == null)
{
idno = createDisplay(data.idno);
}
super.updateDisplayList(unscaledWidth, unscaledHeight);
idno.width = (unscaledWidth * 30/100);
desc.width = (unscaledWidth * 70/100);
trace (idno.width);
trace (desc.width);
}
protected function createDisplay(value:String):StyleableTextField
{
var field:StyleableTextField = StyleableTextField(createInFontContext(StyleableTextField));
field.text = value;
itemContainer.addElement(field);
return field;
}