0

我正在构建一个组件,并且需要能够从字体列表中选择字体。我显示了字体列表,但我不确定正确的数据类型是什么或我应该如何设置它。我已经尝试过 String 和 Font,但似乎遇到了错误。

private var _tfFormat:TextFormat;
_tfFormat = new TextFormat();

这将产生 1067:String 类型的隐式强制转换为不相关的 flash.text:Font。

private var _font:Font = null;
_tfFormat.font = font.fontName;
[Inspectable(type="Font Name", name="font", defaultValue="Arial")]
public function get font():Font 
{
    return _font;
}

public function set font(value:Font):void 
{
    _font = value;
    invalidate();
}

这给了我一个 1065 变量未定义。

private var _font:String = "";

var __cls:Class = getDefinitionByName(font) as Class;
var __fnFont:Font   = new __cls() as Font;              
_tfFormat.font  = __fnFont.fontName;

[Inspectable(type="Font Name", name="font", defaultValue="")]
public function get font():String 
{
    return _font;
}

public function set font(value:String):void 
{
    _font = value;
    invalidate();
}

我觉得我已经很接近了,而且我忽略了这件事非常容易。任何一双眼睛都将不胜感激。谢谢。

4

1 回答 1

0

好的,我解决了这个问题。

我将字体的数据类型改回字符串。事实证明,如果使用嵌入字体,Flash 会在名称中添加一个星号;例如:ArialBold* 但该星号不包含在字体的链接标识符中。所以在我的设置器中,我删除了星号,然后像往常一样从字符串创建一个类。这是(缩短的)代码。

如果有更好的方法,我仍然全神贯注。:)

private var _font:String = "";
private var _tfFormat:TextFormat;
_tfFormat = new TextFormat();
var __cls:Class = getDefinitionByName(font) as Class;
var __fnFont:Font = new __cls() as Font;
_tfFormat.font = __fnFont.fontName;

[Inspectable(type="Font Name", name="font", defaultValue="")]
public function get font():String 
{
    return _font;
}

public function set font(value:String):void 
{
    _font = value.split("*").join('');
    invalidate();
}
于 2013-02-04T16:56:52.853 回答