0

fl.controls.CheckBox在a中使用fl.controls.ScrollPane时,似乎只要 ScrollPane 的子容器中的最后一项是 a CheckBoxScrollPaneupdate()方法总是在 CheckBox 下方留下大量空白,尽管我专门设置了 CheckBox 的大小。

问题:如何从 CheckBox 中删除不可见的高度?

4

1 回答 1

1

我在很多地方进行了研究,最后在下面的链接中找到了这个很棒的人的有用帖子。所有功劳归于他,英飞凌。我无法追踪到他所指的闪存支持论坛。

http://www.actionscript.org/forums/showpost.php3?p=842806&postcount=6

上述隐形高度问题的解决方案真的很难找到,因为 Flash AS3 文档的挖掘并不override protected function configUI():void容易找到方法。至少我直到现在还没有找到它,如果没有对内部工作的某种先验知识,我也永远不会知道它。

*注意:* 此解决方案不仅适用于CheckBox. 其他表单 UI 小部件fl.controls.RadioButton也以相同的方式工作。

如下所述,这是因为小部件的超类中的矩形的包硬编码宽度和高度。我们需要覆盖它,使不可见的矩形变得更小或可编辑。

我将在这里逐字复制他的代码以防止链接腐烂:

package com.your.package.here
{
    import fl.controls.CheckBox;
    import flash.display.DisplayObject;
    import flash.display.Graphics;
    import flash.display.Shape;
    import flash.text.TextFieldAutoSize;

    public class WidgetCheckBox extends CheckBox
    {

        public function WidgetCheckBox()
        {
        }

        override protected function configUI():void 
        {
            super.configUI();

            // remove the background movie clip added in the superclass
            removeChild(background);

            // redraw the hit area of the checkbox component
            var bg:Shape = new Shape();
            var g:Graphics = bg.graphics;
            g.beginFill(0, 0);

            // draw the background area using the width and the height of the 
            // component, instead of hardcoding these properties ( in the
            // superclass the width and height of the rectangle were 100 and 100
            g.drawRect(0, 0, _width, _height);

            g.endFill();
            background = bg as DisplayObject;

            // add the new background
            addChildAt(background, 0);
        }

        override public function set label(value:String):void 
        {
            super.label = value;

            // in the superclass the size of the label textfield was set to
            // 100 by 100 px; instead of using these values, autosize the
            // textfield every time a new label is set
            textField.multiline = false;
            textField.autoSize = TextFieldAutoSize.LEFT;
        }
    }

}

然后你需要做的就是导入你扩展的新类:

var checkBox:WidgetCheckBox = new WidgetCheckBox();

希望这可以帮助一些人减轻他们的头疼。

于 2013-05-14T13:56:58.473 回答