IMenuBarItemRenderer

来源:互联网 发布:4y4淘宝店铺装修网站 编辑:程序博客网 时间:2024/05/08 17:59

package
{
 
import mx.controls.Image;
import mx.controls.menuClasses.MenuBarItem;
 
public class MyMenuBarItem extends MenuBarItem
{
    private var image:Image;
   
    public function MyMenuBarItem()
    {
    }
   
    override protected function commitProperties():void
    {
        super.commitProperties();
       
        if (data)
        {
            // <item label="Three" icon="assets/accessories-text-editor.png"/>
            var icon:String = data.@icon;
            image = new Image();
            image.source = icon;
            addChild(image);
        }
    }
   
    override protected function measure():void
    {
        super.measure();
       
        if (image)
        {
            measuredWidth += image.measuredWidth + 2;
            measuredHeight = Math.max(image.measuredHeight, measuredHeight);
        }
    }
   
    override protected function updateDisplayList(unscaledWidth:Number,
                                                  unscaledHeight:Number):void
    {
        super.updateDisplayList(unscaledWidth, unscaledHeight);
       
        if (image)
        {
            image.x = (20 - image.measuredWidth) / 2;
            image.setActualSize(image.measuredWidth, image.measuredHeight);
            label.x = 20;
        }
    }
}
}

Note that the label and it's associated text is taken car of in the super class.

 

And in the Application;

<mx:MenuBar id="menuBar"
                labelField="@label"
                iconField="@icon"
                showRoot="false"
                menuBarItemRenderer="MyMenuBarItem"
                dataProvider="{dp}"/>

// extends MenuBar class in order to gain access to menuBarItems and

adjust their label x values

    // also extended to apply menu ItemRenderer

    public class ExtendedMenuBar extends MenuBar

    {

        public function ExtendedMenuBar()

        {

            super();

        }

         

         

        override public function getMenuAt(index:int):Menu

        {

            var menu:Menu = super.getMenuAt(index);

            menu.itemRenderer = new

ClassFactory(renderer.ExtendedMenuItemRenderer);

            return menu;

        }

 

package com.istmanagement.vo
{  
    import mx.controls.*;
    import mx.controls.Menu;
    import mx.controls.MenuBar;
    import mx.core.ClassFactory;

    public class ExtendedMenuBar extends   MenuBar
            {       
        public function ExtendedMenuBar()
           
        {
                    super();

        }             
        override public function getMenuAt(index:int):Menu
           
        {               var menu:Menu = super.getMenuAt(index);
                      menu.itemRenderer = new ClassFactory(MyMenuBarItem);
                      return menu;
        
        }
   
}
}

 

MyMenuBarItem.as file

 

package com.istmanagement.vo
{
   
    import mx.controls.Image;
    import mx.controls.Text;
    import mx.controls.menuClasses.MenuBarItem;
   
    public class MyMenuBarItem extends MenuBarItem
    {
        private var image:Image;
        private var text:Text;
       
        public function MyMenuBarItem()
        {
        }
           
        override protected function commitProperties():void
        {
            super.commitProperties();
           
            if (data)
            {
               
                var icon:String = data.menuIcon;
                image = new Image();
                image.source = icon;
                addChild(image);
               
            }
        }
       
        override protected function measure():void
        {
            super.measure();
           
            if (image)
            {
                measuredWidth += image.measuredWidth +2;
                measuredHeight = Math.max(image.measuredHeight, measuredHeight);
            }
        }
       
        override protected function updateDisplayList(unscaledWidth:Number,
                                                      unscaledHeight:Number):void
        {
            super.updateDisplayList(unscaledWidth, unscaledHeight);
           
            if (image)
            {
                image.x = (20 - image.measuredWidth) / 2;
                image.setActualSize(image.measuredWidth, image.measuredHeight);
                label.x = 20;
            }
        }
    }
}

Error ll be displayed

cannot convert to mx.controls.menuClasses.IMenuBarItemRenderer.

 

ExtendedMenuBar.as

package com.vo
{
   
    import mx.controls.*;
    import mx.controls.Menu;
    import mx.controls.MenuBar;
    import mx.controls.menuClasses.MenuBarItem;
    import mx.controls.menuClasses.MenuItemRenderer;
    import mx.core.ClassFactory;

 

    public class ExtendedMenuBar extends MenuBar
       
    {
public function ExtendedMenuBar()
           
        {
           super();
               }
    
        override public function getMenuAt(index:int):Menu
           
        {
           
            var menu:Menu = super.getMenuAt(index);
             menu.itemRenderer = new ClassFactory(MyMenuBArItem);
          6        return menu;
           
        }
   
}
}


MyMenuBArItem.as

 

package com.vo
{
   
    import mx.collections.ArrayCollection;
    import mx.controls.Image;
    import mx.controls.Menu;
    import mx.controls.MenuBar;
     import mx.controls.menuClasses.MenuBarItem;
    import mx.controls.menuClasses.MenuItemRenderer;
    import mx.rpc.events.ResultEvent;

 

    public class MyMenuBArItem extends MenuItemRenderer
    {
        private var image:Image;
        private var imgtest:Image;
        private var text:Text;
       
        public function MyMenuBArItem()
        {
           }
           
        override protected function commitProperties():void
        {
            super.commitProperties();
           
           
            var icon:String = data.menuIcon;
            image = new Image();
            image.source = icon;
            addChild(image);
           
            var str:ArrayCollection= data.children;
            menuImage(str);
           
       
        }

 

        public function menuImage(str:ArrayCollection):void
        {
            var str:ArrayCollection= data.children;
            if(str == null)
            {
               
            }
            else
            {
                var j:int;
                var i:int=0;
                for(; i<str.length ; i++)
                {
                    var test:ArrayCollection=str[i].children;
                    for(j=0;j<test.length;j++)
                    {
                        var menuicon:String =   test[j].menuIcon ;
                        imgtest= new Image();
                        imgtest.source= menuicon;
                        addChild(imgtest);
                       
                    }
                }
            }
           
        }

 

        override protected function measure():void
        {
            super.measure();
           
            if (image)
            {
                measuredWidth += image.measuredWidth +2;
                measuredHeight = Math.max(image.measuredHeight, measuredHeight);
            }
        }
       
        override protected function updateDisplayList(unscaledWidth:Number,
                                                      unscaledHeight:Number):void
        {
            super.updateDisplayList(unscaledWidth, unscaledHeight);
           
            if (image)
            {
                image.x = (20 - image.measuredWidth) / 2;
                image.setActualSize(image.measuredWidth, image.measuredHeight);
                label.x = 20;
            }
        }
    }
}

 

It works for top menu but not working for submenu.

 

 

 

 

原创粉丝点击