2012-09-18 56 views
1

我發現了幾個關於CellRenderer的教程,它將改變整個列表或選定的項目,但我並不是所有AS3都很好,還需要一些幫助。我正在從xml文件加載用戶列表。一切都很好,但我想要做的事實際上是由該組着色。Flash AS3 - 着色的用戶名列表框不同的顏色

再一次,它加載到列表就好了,我正在尋找的是在從xml文件中添加它們的循環中,如果它的管理員使它成爲紅色字體,爲綠色字體爲mod,黑色爲成員。

請幫忙嗎?

+0

我們通常處理這種事情在項目渲染列表。項目渲染器具有設置在其上的給定列表項目的數據,然後它可以適當地呈現其本身(即:如果特定數據元素用於管理員,渲染器使用紅色字體)。如果你顯示你正在使用的代碼,有人可以給你一個更確定的答案:) –

回答

0

有警告夫婦要注意的:

  1. 如果你打算使用的字體格式,還需要set the renderer styleembedFonts
  2. 既然你要爲單個細胞的風格,首先需要等待列表填充(完成它是組件生命週期的內部數據設置部分)。這可以通過致電drawNow()invalidate()
  3. 最後,在render處理程序中通過itemToCellRender()方法訪問單個單元格渲染器以設置樣式。

這裏有一個基本的例子(和想象,B,C作爲管理員,MOD,成員):

//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][email protected]),group:String(data.user[i][email protected])}); 
      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 
     } 
+0

非常有幫助。謝謝! – Cyrus