我通过代码动态创建一个AS3 TextField设置为输入模式,但是当用户尝试输入一些特殊字符(例如,áàééèòúúúç)时,它们就不会出现在TextInput上。
将它们复制并粘贴到文本域可以正常工作,但我更喜欢用户可以直接输入它们。
这是一个快速测试,证明了这一点:
package
{
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFieldType;
public class TextInput extends Sprite
{
public function TextInput()
{
super();
var t:TextField = new TextField;
t.type = TextFieldType.INPUT;
addChild(t);
}
}
}
这会创建一个用户可以键入的文本字段,但我无法输入特殊字符,如à。
非常感谢。
答案 0 :(得分:3)
如果您可以将其粘贴到“输入”字段中,则应该能够键入它。
如果您使用与上面相同的字体开始新的Flash文档,请使用以下设置在舞台上创建输入文本字段:
嵌入正常的字形
嵌入扩展的拉丁字形
这应该有效,如:
现在,如果所有这些都有效,那么它可能与编写类的方式有关。
编写嵌入字体的类很麻烦。确保将字体嵌入库中并将其导出为操作脚本:
然后,您需要使用以下代码:
// The name of the font class
var _font:Calibri = new Calibri();
var _textFormat:TextFormat = new TextFormat();
_textFormat.font = _font.fontName;
_textFormat.size = 16;
// For some weird reason the ordering here is important. I remember mucking around with this for ages for an old project. EmbedFonts must come last
var _textField:TextField = new TextField();
_textField.defaultTextFormat = _textFormat;
_textField.type = TextFieldType.INPUT;
_textField.embedFonts = true;
addChild(_textField);
这应该让一切顺利:
**编辑** 对于那些使用FlashDevelop等的人,您可以使用以下方法:
public class Main extends MovieClip {
[Embed(source='assets/HOBOSTD.OTF', fontName='_hobo', embedAsCFF="false")] public static const HOBO:Class;
public function Main() {
var _font:Font = new HOBO() as Font;
var _textFormat:TextFormat = new TextFormat();
_textFormat.font = _font.fontName;
_textFormat.size = 22;
var _textField:TextField = new TextField();
_textField.embedFonts = true;
_textField.defaultTextFormat = _textFormat;
_textField.autoSize = TextFieldAutoSize.LEFT;
_textField.antiAliasType = AntiAliasType.ADVANCED;
_textField.type = TextFieldType.INPUT;
addChild(_textField);
}
}
您将获得以下内容:
现在请注意,字体文件必须与项目相关,或者如果您选择,源可以指向C:\ windows \ font文件夹。在上面的示例中,我将字体复制到我的assets文件夹中。