如何通过代码加载从经典textField获取“样式”?

时间:2013-07-25 22:35:46

标签: actionscript-3 flash fonts styles textfield

我需要将textField中使用的样式放在舞台上,并通过代码执行此操作。

事实是,在我的情况下,粗体和斜体是不够的,因为我的风格是半粗体。

当我在代码中分析textField时,我无法找到获得该样式的方法。

你知道有什么办法吗?。

换句话说,当我得到textFormat时,我需要知道Flash中使用的字体的样式。

例如,如果我的字体是“Signika”,我需要知道该样式是Semibold。现在,我只得到“Signika”。如果我检查大胆的风格,它是有效的,因为大胆是真的。但这就是我可以从中得到的所有信息。

感谢。

1 个答案:

答案 0 :(得分:1)

看见TextField API ReferencegetTextFormat()方法。 (耶!)

它返回一个TextFormat对象,其中包含该TextField的完整定义,然后可以通过setTextFormat()将其应用于另一个TextField。

也就是说,字体系列在AS3中的工作方式略有不同(遗憾的是,不是Adobe的错,而是操作系统)。例如,Myriad Pro有Regular,Light,Semibold和Bold。然而,一旦嵌入,只显示两个实际的字体名称,区分它们的唯一方法是设置TextFormat.bold = true

The problem with getting font families in flash.

有趣的是,省略其中一个伴随字体的嵌入不会引发错误,而是在您只嵌入Myriad Pro Regular而不是Myriad Pro Bold的情况下,设置TextFormat.bold = true将执行常规的人造粗体(自然会比实际的粗体字体质量低很多,但是......它有效)。

希望能够解决问题。


<强>更新

我调查了Signika,它显然遭受了严重的身份危机。为了举例说明,嵌入整个字体系列并运行以下命令:

var fontList:Array = Font.enumerateFonts();
for( var i:int = 0; i < fontList.length; i++ ) {
    trace("Font Name: " + fontList[i].fontName + ", " + fontList[i].fontStyle )
}

这将跟踪环境中存在的每种字体的列表。遗憾的是,无论您如何嵌入字体(以编程方式或通过库导入),字体都会覆盖其他系列条目(假设它们以相同的方式报告而不区分环境)。

// Myriad Pro Results:
Font Name: Myriad Pro, regular
Font Name: Myriad Pro, bold
Font Name: Myriad Pro Light, regular
Font Name: Myriad Pro Light, bold

对Myriad Pro系列运行相同的查询实际上报告了四个条目,没有重叠,而Signika只报告4个中的2个。

// Signika Results:
Font Name: Signika, regular
Font Name: Signika, bold

我之前说过的内容仍然存在:使用上面的API方法将导致TextFormat对象完全描述正在使用的字体。它们由对象上的name:Stringbold:Boolean属性区分。但是,由于Flash使用相同的报告属性覆盖嵌入对象(或者根本不覆盖),因此您可以随时使用4种家庭样式中的2种:常规版本和粗体版本。

希望澄清事情。