Flex 4.5对齐菜单项中心

时间:2011-10-14 12:45:27

标签: flex flex4 menubar alignment menu-items

我搜索了网络,但所有这些都是针对Flex 3的。

Flex 4.5中有什么方法可以将mx:MenuBar项目对齐到栏中间?

(通常他们在最左侧)

2 个答案:

答案 0 :(得分:0)

为什么不把MenuBar放在父容器中?父容器的宽度为100%,而MenuBar则不宽。然后可以将MenuBar水平放置在该容器内。

答案 1 :(得分:0)

来自flexdeveloper.eu,将itemAlign设置为 center

package custom{
    import flash.geom.Rectangle;

    import mx.controls.MenuBar;
    import mx.controls.menuClasses.IMenuBarItemRenderer;
    import mx.core.IFlexDisplayObject;

    public class AlignableMenuBar extends MenuBar {
        private static  const MARGIN_WIDTH:int=10;
        private var background:IFlexDisplayObject;
        public var itemAlign:String;

        public function AlignableMenuBar() {
            super();
        }

        override protected  function updateDisplayList(unscaledWidth:Number,unscaledHeight:Number):void {
            if (this.itemAlign == "right") {
                updateDisplayListRightAlign(unscaledWidth,unscaledHeight);
            } else if (this.itemAlign == "center") {
                updateDisplayListCenterAlign(unscaledWidth,unscaledHeight);
            } else {
                updateDisplayListLeftAlign(unscaledWidth,unscaledHeight);
            }
        }

        protected function updateDisplayListLeftAlign(unscaledWidth:Number,unscaledHeight:Number):void {
            super.updateDisplayList(unscaledWidth,unscaledHeight);

            var lastX:Number=MARGIN_WIDTH;
            var lastW:Number=0;
            var len:int=menuBarItems.length;

            var clipContent:Boolean=false;
            var hideItems:Boolean=unscaledWidth == 0 || unscaledHeight == 0;

            for (var i:int=0; i < len; i++) {
                var item:IMenuBarItemRenderer=menuBarItems[i];

                item.setActualSize(item.getExplicitOrMeasuredWidth(),unscaledHeight);
                item.visible=! hideItems;

                lastX=item.x=lastX + lastW;
                lastW=item.width;

                if (! hideItems && item.getExplicitOrMeasuredHeight() > unscaledHeight || lastX + lastW > unscaledWidth) {
                    clipContent=true;
                }
            }

            if (background) {
                background.setActualSize(unscaledWidth,unscaledHeight);
                background.visible=! hideItems;
            }

            // Set a scroll rect to handle clipping.
            scrollRect=clipContent?new Rectangle(0,0,unscaledWidth,unscaledHeight):null;

        }

        protected function updateDisplayListCenterAlign(unscaledWidth:Number,unscaledHeight:Number):void {
            super.updateDisplayList(unscaledWidth,unscaledHeight);

            var len:int=menuBarItems.length;

            var totalWidth:int=0;
            for (var i:int=0; i < len; i++) {
                var tempItem:IMenuBarItemRenderer=menuBarItems[i];
                totalWidth+= tempItem.width;
            }
            var lastX:Number=(this.width - totalWidth)/2;
            var lastW:Number=0;

            var clipContent:Boolean=false;
            var hideItems:Boolean=unscaledWidth == 0 || unscaledHeight == 0;

            for (var j:int=0; j < len; j++) {
                var item:IMenuBarItemRenderer=menuBarItems[j];

                item.setActualSize(item.getExplicitOrMeasuredWidth(),unscaledHeight);
                item.visible=! hideItems;

                lastX=item.x=lastX + lastW;

                lastW=item.width;

                if (! hideItems && item.getExplicitOrMeasuredHeight() > unscaledHeight || lastX + lastW > unscaledWidth) {
                    clipContent=true;
                }
            }

            if (background) {
                background.setActualSize(unscaledWidth,unscaledHeight);
                background.visible=! hideItems;
            }

            // Set a scroll rect to handle clipping.
            scrollRect=clipContent?new Rectangle(0,0,unscaledWidth,unscaledHeight):null;


        }

        protected function updateDisplayListRightAlign(unscaledWidth:Number,unscaledHeight:Number):void {
            super.updateDisplayList(unscaledWidth,unscaledHeight);

            var len:int=menuBarItems.length;

            var totalWidth:int=0;
            for (var i:int=0; i < len; i++) {
                var tempItem:IMenuBarItemRenderer=menuBarItems[i];
                totalWidth+= tempItem.width;
            }
            var lastX:Number=this.width - totalWidth;
            var lastW:Number=0;

            var clipContent:Boolean=false;
            var hideItems:Boolean=unscaledWidth == 0 || unscaledHeight == 0;

            for (var j:int=0; j < len; j++) {
                var item:IMenuBarItemRenderer=menuBarItems[j];

                item.setActualSize(item.getExplicitOrMeasuredWidth(),unscaledHeight);
                item.visible=! hideItems;

                lastX=item.x=lastX + lastW;

                lastW=item.width;

                if (! hideItems && item.getExplicitOrMeasuredHeight() > unscaledHeight || lastX + lastW > unscaledWidth) {
                    clipContent=true;
                }
            }

            if (background) {
                background.setActualSize(unscaledWidth,unscaledHeight);
                background.visible=! hideItems;
            }

            // Set a scroll rect to handle clipping.
            scrollRect=clipContent?new Rectangle(0,0,unscaledWidth,unscaledHeight):null;
        }
    }
}