码迷,mamicode.com
首页 > 移动开发 > 详细

[Phonegap+Sencha Touch] 移动开发16 安卓webview中,input输入框不触发backspace回退键事件的解决办法

时间:2014-04-29 13:38:21      阅读:765      评论:0      收藏:0      [点我收藏+]

标签:android   phonegap   移动开发   cordova   web应用   

可以用安卓手机浏览器打开 http://javascript.info/tutorial/keyboard-events#test-stand-test-stand 测试看看。


Android 4.2自带浏览器和webview的测试结果(其他版本没试过,估计4.X都是这样):

当input有内容的时候,点击软键盘回退键(keyCode=8),是有keyEvents事件(keyup keydown)触发的;当input是空的时候,再点击,就不触发keyEvents了。

Chrome浏览器测试结果

尼玛,不管input空不空,都不触发。。。。这。。啥意思。。。。


解决办法:

打开目录 phonegap\platforms\android\CordovaLib\src\org\apache\cordova

在里面添加一个文件CordovaInputConnection.java

内容如下:

package org.apache.cordova;

import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.BaseInputConnection;
public class CordovaInputConnection extends BaseInputConnection{

    public CordovaInputConnection(View targetView, boolean fullEditor) {
        super(targetView, fullEditor);
    }

    @Override
    public boolean deleteSurroundingText(int beforeLength, int afterLength) {       
        // magic: in latest Android, deleteSurroundingText(1, 0) will be called for backspace
        if (beforeLength == 1 && afterLength == 0) {
            // backspace
            return super.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL))
                && super.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DEL));
        }

        return super.deleteSurroundingText(beforeLength, afterLength);
    }
}

然后在CordovaWebView.java中 @override一个方法,内容如下:

    @Override
    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
        CordovaInputConnection connection = new CordovaInputConnection(this, false);

        return connection;
    }
记得顶上要导入下面的2个包:
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;

好了,再编译就好了。



一劳永逸的办法(只要没有更新phonegap或cordova),你可以把上面的变更做在下面的目录中。

C:\Users\xxxx\.cordova\lib\android\cordova\3.4.0\framework\src\org\apache\cordova

这个目录是CordovaLib库的代码,改了这个目录下面的代码,以后生成的phonegap项目都会应用到。

我已经把这个提交到Cordova-android开源项目去了,希望下个版本3.5.0可以用上。





欢迎加入Sencha Touch + Phonegap 群:194182999

共同学习交流(博主QQ:479858761

[Phonegap+Sencha Touch] 移动开发16 安卓webview中,input输入框不触发backspace回退键事件的解决办法

标签:android   phonegap   移动开发   cordova   web应用   

原文地址:http://blog.csdn.net/lovelyelfpop/article/details/24700795

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!