1

リスト全体または選択した項目を変更する CellRenderer に関するチュートリアルをいくつか見つけましたが、まだ AS3 にはあまり適していないので、助けが必要です。xml ファイルからユーザーリストを読み込んでいます。すべてが正常に読み込まれますが、実際に行おうとしているのは、グループごとに色付けすることです。

繰り返しますが、リストに問題なくロードされます。私が探しているのは、管理者が赤のフォント、mod の緑のフォント、メンバーの黒にすると、xml ファイルからそれらを追加するループ内にあります。

何か助けてください。

4

1 に答える 1

0

注意すべき点がいくつかあります。

  1. フォント形式を使用する予定の場合は、レンダラー スタイルの embedFontsもtrueに設定する必要があります
  2. 個々のセルにスタイルを設定したいので、最初にリストが入力されるのを待つ必要があります (コンポーネントのライフサイクルの内部データ設定部分を終了します)。これは、drawNow()またはinvalidate()を呼び出すことで強制できます。
  3. 最後に、レンダーハンドラーでitemToCellRender()メソッドを介して個々のセル レンダラーにアクセスし、スタイルを設定します。

以下は基本的な例です (そして、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
        }
于 2012-09-18T22:37:10.343 に答える