我找到了几个关于 CellRenderer 的教程,它们将更改整个列表或选定的项目,但我对 AS3 还不是很好,需要一些帮助。我正在从 xml 文件加载用户列表。一切都加载得很好,但我想做的实际上是按组着色。
再次,它很好地加载到列表中,我要做的是在从 xml 文件添加它们的循环中,如果它的管理员将其设为红色字体,mod 为绿色字体,成员为黑色。
请问有什么帮助吗?
我找到了几个关于 CellRenderer 的教程,它们将更改整个列表或选定的项目,但我对 AS3 还不是很好,需要一些帮助。我正在从 xml 文件加载用户列表。一切都加载得很好,但我想做的实际上是按组着色。
再次,它很好地加载到列表中,我要做的是在从 xml 文件添加它们的循环中,如果它的管理员将其设为红色字体,mod 为绿色字体,成员为黑色。
请问有什么帮助吗?
有几个注意事项需要注意:
这是一个基本示例(并将 a、b、c 想象为 admin、mod、member):
//in a setup function
{
//some dummy data
var data:XML = <users>
<user name="user 1" group="a" />
<user name="user 2" group="a" />
<user name="user 3" group="a" />
<user name="user 4" group="b" />
<user name="user 5" group="b" />
<user name="user 6" group="b" />
<user name="user 7" group="c" />
<user name="user 8" group="c" />
<user name="user 9" group="c" />
</users>
//create a list
var list:List = addChild(new List()) as List;
list.setSize(600,400);
list.move(0,400);
//setup a font AND set embefFonts to true
list.setRendererStyle("textFormat",new TextFormat("Siemens Sans SC Black",11,0xFF9900));
list.setRendererStyle("embedFonts",true);
//populate list
for(var i:int = 0 ; i < data.user.length(); i++) list.addItem({label:String(data.user[i].@name),group:String(data.user[i].@group)});
list.invalidate();//tell list to refresh itself
list.addEventListener(Event.RENDER,listUpdated);//listen for the refresh
}
//after the list refreshed
private function listUpdated(event:Event):void{
//setup text formats
var formats:Dictionary = new Dictionary();
formats["a"] = new TextFormat("Siemens Sans SC Black",11,0x990000);
formats["b"] = new TextFormat("Siemens Sans SC Black",11,0x009900);
formats["c"] = new TextFormat("Siemens Sans SC Black",11,0x000099);
var list:List = List(event.currentTarget);
for(var i:int = 0 ; i < list.dataProvider.length; i++) {
var item:Object = list.getItemAt(i);
var cr:CellRenderer = CellRenderer(list.itemToCellRenderer(item));//get the individual cell renderers
cr.setStyle("textFormat",formats[item.group]); //set styles per cell
}
list.removeEventListener(Event.RENDER,listUpdated);//clear listener
}