zoukankan      html  css  js  c++  java
  • openfl更新2.0后,android输入法又不能输中文了

    今天手贱更新了一下openfl,fd里面又各种报错。最伤心的是,之前修改MainView.java输入中文的方法现在居然失效了。还好这段时间研究c2dx,总算是能读能懂修改的那段代码,捣鼓了一下午,算是解决了。

    openfl以前版本android输中文的解决方案原贴地址:

    http://blog.csdn.net/rocks_lee/article/details/8274194

    新版lime1.5.7 +openfl2.0.1。不知道是lime还是openfl,升级之后直接去掉了nme的调用。所以改原先nmu下的MainView.java也没用了。在lime下也有MainView.java文件,我试图加override发现GLSurfaceView下面跟本没有onKeyMultiple方法给我覆盖。而且onKeyChange由原先的两参数变成了三个参数。完全没用。

    于是我在lime目录下找到了GameActivity.java类,activity是有onKeyMultiple方法的。于原贴代码改成如下,粘到GameActivity.java里面即可。

    // Pelephone
        @Override public boolean onKeyMultiple(final int inKeyCode, int repeatCount, final 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 = mView;
            me.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) {
                            int charCode = me.translateKeyCode (keyCode, event);
                             //Simulate key down and up...
                            me.HandleResult(Lime.onKeyChange(keyCode,charCode, true));
                            me.HandleResult(Lime.onKeyChange(keyCode,charCode, false));
                        }
                    }
                }
            });
            return true;
        }
        //end pelephone

    直接改文件夹下的GameActivity.java,下次更新后还是会被覆盖。而且这样搞也影响lime代码的完成性。可以用改模板的方法,把模板切到自己项目的目录下。

    例如我在项目下建一个tmp文件夹,将修改好的GameActivity.java放入tmp文件夹。再然后修改项目配置xml加入下面一行标签

    <template path="tmp/GameActivity.java" rename="src/org/haxe/lime/GameActivity.java" if="android" />

    编译一下,又可以打中文了。

    另外还有一个用jni解决中文问题的方法,我找到的帖子如下

    http://blog.sina.com.cn/s/blog_47030a4c0101dnml.html

    jni的思路不错,学到许多好东西,我也是在找接入开放平台sdk时找到的方法。

  • 相关阅读:
    $resource详解
    大白话讲解Promise(一)
    《AngularJS》5个实例详解Directive(指令)机制
    Openstack实现共有云VPC的SDN网络
    Openstack实现共有云多flat网络
    Openstack使用NFS作为后端存储
    Openstack块存储cinder安装配置
    Openstack创建镜像
    Openstack深入了解虚拟机
    Python全栈day26-27(面向对象进阶)
  • 原文地址:https://www.cnblogs.com/pelephone/p/openfl_2_zh_CN.html
Copyright © 2011-2022 走看看