0

我已经在网上搜索过,但所有这些 tuts 都是针对 Flex 3 的。

Flex 4.5 中对齐mx:MenuBar栏中间的项目的方法是什么?

(通常它们在最左侧)

4

2 回答 2

0

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

于 2011-10-15T02:09:26.210 回答
0

来自flexdeveloper.eu,设置itemAligncenter

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;
        }
    }
}
于 2011-10-16T10:51:58.237 回答