[Phonegap+Sencha Touch] 移动开发16 安卓webview中,input输入框不触发backspace回退键事件的解决办法
可以用安卓手机浏览器打开 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;
}
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)