在webview或默认浏览器中,只有当输入不为空时,我才能收到退格键事件(keyup,keydown和keypress),好像这是android 4.1 +的错误。
您可以在下面尝试此页面(使用Android设备打开它) http://javascript.info/tutorial/keyboard-events#test-stand-test-stand
我通过创建自定义InputConnection尝试了答案here和here。
它现在正在工作,即使输入为空,我也可以收到退格键事件,但是有副作用:
我不能再输入单词和短语(第1张和第2张照片),
我一次只能输入一个字母或字符(第3张图片)。
我该如何解决这个问题,有没有解决办法?感谢。
答案 0 :(得分:3)
我不知道你的情况,但在我的情况下qwerty键盘有退格键控/键盘事件但数字不触发退格键事件我的android版本是4.4.2 我已经修改了你在这两篇帖子中使用过的代码。只需使用此代码,您的退格键事件就会被触发
这是扩展的webview类,我们在其中定义自己的onCreateInputConnection 和ExtenderInputConnection是我的类,它扩展了基本输入连接,其代码也在下面给出
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
super.onCreateInputConnection(outAttrs);
//This Code is for showing Decimal point in numeric Keyboard
if ((outAttrs.inputType & InputType.TYPE_CLASS_NUMBER) == InputType.TYPE_CLASS_NUMBER)
{
outAttrs.inputType |= InputType.TYPE_NUMBER_FLAG_DECIMAL;
}
else
{
InputConnection connection = super.onCreateInputConnection(outAttrs);
return connection;
}
return new ExtenderInputConnection(this,false);
}
以下是ExtenderInputConnection的代码
import android.text.InputType;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.BaseInputConnection;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
public class ExtenderInputConnection extends BaseInputConnection implements InputConnection{
public ExtenderInputConnection(View targetView, boolean fullEditor) {
super(targetView, fullEditor);
// TODO Auto-generated constructor stub
}
@Override
public boolean deleteSurroundingText(int beforeLength, int afterLength) {
if (beforeLength == 1 && afterLength == 0) {
// backspace
return super.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL));
}
return super.deleteSurroundingText(beforeLength, afterLength);
}
}
答案 1 :(得分:0)
您需要使用onkeyup / keydown / keypress事件吗?它们不能很好地适应移动输入模型,这就是存在这些错误的原因。作文活动会为您提供更好的解决方案吗[1]?
[1] https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent