gpt4 book ai didi

android - 在 Android WebView 中读取键盘事件

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:41:02 24 4
gpt4 key购买 nike

我正在尝试在 android WebView 中收听关键事件。例如,当用户填写表格时,我应该收到关键事件。这是我的 WebView 代码

public class MyWebView extends WebView implements OnKeyListener
{
.....

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
Log.i("PcWebView", "onKeyDown keyCode=" + keyCode);
return super.onKeyDown(keyCode, event);
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent event)
{
Log.i("PcWebView", "onKeyUp keyCode=" + keyCode);
return super.onKeyUp(keyCode, event);
}

@Override // Listener is initialized in the constructor
public boolean onKey(View v, int keyCode, KeyEvent event)
{
Log.i("PcWebView", "onKey keyCode=" + keyCode);
return false;
}

.....

}

onKeyDownonKeyUponKey 这两个方法都不会在用户输入文本框或文本区域时被调用。是否有可能实现这一点,或者 Android 是否出于可能侵犯隐私的原因而限制了这一点?

最佳答案

注意!此解决方案仅支持英文字母。

无需访问 HTML 源代码或 JS 事件即可完成。适用于软键盘和硬键盘的 Android 5.0.2。

public class MyWebView extends WebView {


@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
return new BaseInputConnection(this, false); //this is needed for #dispatchKeyEvent() to be notified.
}

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
boolean dispatchFirst = super.dispatchKeyEvent(event);
// Listening here for whatever key events you need
if (event.getAction() == KeyEvent.ACTION_UP)
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_SPACE:
case KeyEvent.KEYCODE_ENTER:
// e.g. get space and enter events here
break;
}
return dispatchFirst;
}
}

这里的技巧是用一个简化的覆盖系统提供的 InputConnection 输入实现。默认情况下阻止开发人员访问事件是 Google 员工故意设计的。因为按键事件输入不再是唯一的。有手势、声音等等。官方建议是“完全停止依赖遗留键事件进行文本输入”。在此处查看更多详细信息:https://code.google.com/p/android/issues/detail?id=42904#c15

关于android - 在 Android WebView 中读取键盘事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11429878/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com