0

我们正在将一些 Flex3 代码重构为 Flex4 代码,但我遇到了 Spark TabBar 控件的问题。在 4.5 中,当将其调整到低于所有选项卡的宽度时,选项卡会缩小。我在 Flex4 上没有看到这一点,在进行了一些谷歌搜索之后,我似乎找不到解决方案。

似乎正在发生的事情是 TabBar 的 minWidth 被设置为所有按钮的总和加上它们之间的间隙。

有什么想法吗?将是最有帮助的。我认为这很容易,但无法解决。

<s:TabBar id="myTabBar" top="0" width="100%" dataProvider="{myTabs}" >
    <s:layout>
        <s:HorizontalLayout gap="1" variableColumnWidth="true" />
    </s:layout>
</s:TabBar>

更新:
我想出了一个解决方案,但我不确定它是否是一个理想的解决方案。我采用了默认的 TabBarSkin 并进行了修改以添加测量方法。在 measure 方法中,我遍历选项卡,找到标签对象,并计算宽度。我用它来设置父组件的 maxWidth 。它似乎确实有效,但欢迎对这种方法提出任何意见。我还拿出了上面的布局标签。

        protected override function measure():void
        {
            //TODO Auto-generated method stub
            super.measure();


            // Calculate the maximum size of the button should stretch to and then set the host Component 
            // To the maxWidth.  This is accomplished by iterating through the children of the dataGroup 
            // and then getting the label components from labelDisplay.   Once you have that then we can 
            // get the PreferredBoundsWidth and add them all up.  The left and right values are added in as 
            // that is the spacing on each side of the label.  
            var totalButtonWidth:Number = 0;
            var tab:UIComponent;
            var calculatedWidth:Number;

            for (var i:int = 0; i < dataGroup.numElements; i++)
            {
                tab = dataGroup.getElementAt(i) as UIComponent;
                calculatedWidth = 0; 
                if (tab.hasOwnProperty("labelDisplay")) 
                {
                    var tabLabel:Label = (tab["labelDisplay"] as Label); 
                    calculatedWidth = tabLabel.getPreferredBoundsWidth() + tabLabel.left + tabLabel.right; 
                }
                totalButtonWidth = totalButtonWidth + calculatedWidth;

            }

            hostComponent.maxWidth = totalButtonWidth;
            trace("totalWidth is " + totalButtonWidth);
        }

如果我记得,可以从 SDK 中获取皮肤并对其进行修改并重用它,对吗?

4

1 回答 1

1

是的,按照您在更新中所说的去做是绝对可以的。

但是,从头开始定义自己的皮肤可能比修改现有皮肤容易得多。看看这个文档。

于 2012-09-15T00:04:44.880 回答