fl.controls.CheckBox
在a中使用fl.controls.ScrollPane
时,似乎只要 ScrollPane 的子容器中的最后一项是 a CheckBox
,ScrollPane
的update()
方法总是在 CheckBox 下方留下大量空白,尽管我专门设置了 CheckBox 的大小。
问题:如何从 CheckBox 中删除不可见的高度?
fl.controls.CheckBox
在a中使用fl.controls.ScrollPane
时,似乎只要 ScrollPane 的子容器中的最后一项是 a CheckBox
,ScrollPane
的update()
方法总是在 CheckBox 下方留下大量空白,尽管我专门设置了 CheckBox 的大小。
问题:如何从 CheckBox 中删除不可见的高度?
我在很多地方进行了研究,最后在下面的链接中找到了这个很棒的人的有用帖子。所有功劳归于他,英飞凌。我无法追踪到他所指的闪存支持论坛。
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();
希望这可以帮助一些人减轻他们的头疼。