当前位置: 代码迷 >> Android >> NME Android目标中文输入有关问题完美解决
  详细解决方案

NME Android目标中文输入有关问题完美解决

热度:91   发布时间:2016-05-01 12:44:58.0
NME Android目标中文输入问题完美解决!

前面写了两篇文章提到了在haXe+NME中解析和显示中文的问题,但是经验证,在Android/Windows等目标平台上(iOS目前没条件测试),中文输入还是不行,TextField似乎仅接受Ascii字符。

今天在群中看到有位大侠找到了老外写的一篇文章解决了这个问题:http://www.haxenme.org/community/forums/general-discussion/patch-for-non-ascii-character-input-from-soft-keyboard-in-androi/

于是特意测试了一下,上面老外的原版补丁未能解决一次输入多个字符的问题,但是稍作修改即可成功输入中文了,而且像讯飞输入法之类的语音大段输入也没问题!目前看来已经没有什么东西能阻挡haXe制霸移动开发的步伐了,哇哈哈哈哈!

具体修改步骤如下:

1. 这次需要hack NME的Android模板文件了,具体路径如下:

  <haXe安装目录>\lib\nme\<版本号>\tools\command-line\android\template\src\org\haxe\nme\MainView.java

2. 在MainView类中添加一个方法如下:

    @Override
    public boolean onKeyMultiple(final int inKeyCode, int repeatCount, KeyEvent event) {
        String s = event.getCharacters();
        if (s == null || s.length() == 0) return super.onKeyMultiple(inKeyCode, repeatCount, event);
        final char[] cc = s.toCharArray();
        int cnt = 0;
        for (int i = cc.length; --i >= 0; cnt += cc[i] != 0 ? 1 : 0);
        if (cnt == 0) return super.onKeyMultiple(inKeyCode, repeatCount, event);
        final MainView me = this;
        queueEvent(new Runnable() {
            // This method will be called on the rendering thread:
            public void run() {
                for (int i = 0, n = cc.length; i < n; i++) {
                    int keyCode;
                    if ((keyCode = cc[i]) != 0) {
                        // Simulate key down and up...
                        me.HandleResult(NME.onKeyChange(keyCode, true));
                        me.HandleResult(NME.onKeyChange(keyCode, false));
                    }
                }
            }
        });
        return true;
    }

  相关解决方案