我正在构建一个组件,需要能够从字体列表中选择字体。我有字体列表显示,但我不确定正确的数据类型是什么或我应该如何设置它。我尝试过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();
}
我觉得我非常接近,而且我很容易忽视它。任何一双眼睛都会受到赞赏。感谢。
答案 0 :(得分:0)
好的,我解决了这个问题。
我将字体的数据类型更改回String。事实证明,如果使用嵌入字体,Flash会在名称中添加星号;例如:ArialBold *但该星号的链接标识符中不包含该星号。所以在我的setter中我删除了星号,然后正常地从字符串创建一个类。这是(缩短的)代码。
如果有更好的方法,我仍然都是耳朵。 :)
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();
}