AS3文本输入重音

时间:2011-06-26 19:39:42

标签: actionscript-3 actionscript

我通过代码动态创建一个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);
        }
    }
}

这会创建一个用户可以键入的文本字段,但我无法输入特殊字符,如à。

非常感谢。

1 个答案:

答案 0 :(得分:3)

如果您可以将其粘贴到“输入”字段中,则应该能够键入它。

如果您使用与上面相同的字体开始新的Flash文档,请使用以下设置在舞台上创建输入文本字段:

嵌入正常的字形 enter image description here

嵌入扩展的拉丁字形 enter image description here

这应该有效,如: enter image description here

现在,如果所有这些都有效,那么它可能与编写类的方式有关。

编写嵌入字体的类很麻烦。确保将字体嵌入库中并将其导出为操作脚本:

enter image description here

然后,您需要使用以下代码:

// 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);

这应该让一切顺利:

enter image description here

**编辑** 对于那些使用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);
    }
}

您将获得以下内容:

enter image description here

现在请注意,字体文件必须与项目相关,或者如果您选择,源可以指向C:\ windows \ font文件夹。在上面的示例中,我将字体复制到我的assets文件夹中。