前面写了两篇文章提到了在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;
}