java - OnTouchListener webview 总是循环
问题描述
我想检测我是否在我的 webview 上触摸编辑文本类型,我将显示浮动操作按钮。如果我触摸未知类型,浮动操作按钮将被隐藏。
但是在这里,当我触摸 webview 上的某个位置时,它会循环 4 / 5 次,直到我得到真正的触摸类型。
这是我的代码:
@Override
public boolean onTouch(View v, MotionEvent event) {
WebView.HitTestResult hitTestResult = ((WebView) v).getHitTestResult();
if (hitTestResult.getType() == WebView.HitTestResult.EDIT_TEXT_TYPE) {
this.showKeyboard();
this.floatingActionButton.setVisibility(View.VISIBLE);
this.fabKeyboard.setVisibility(View.VISIBLE);
}else{
this.hideKeyboard();
this.floatingActionButton.setVisibility(View.GONE);
this.fabKeyboard.setVisibility(View.GONE);
}
Log.d("HIT RESULT", hitTestResult.getExtra() + " " + hitTestResult.getType());
return false;
}
这是我的日志:
I/InputMethodManager: toggleSoftInput(I,I)
D/HIT RESULT: null 9
I/InputMethodManager: toggleSoftInput(I,I)
D/HIT RESULT: null 9
I/InputMethodManager: toggleSoftInput(I,I)
D/HIT RESULT: null 9
D/ViewRootImpl@c99fda4[MainActivity]: ViewPostIme pointer 1
I/InputMethodManager: toggleSoftInput(I,I)
D/HIT RESULT: null 9
// 9 IS Edit Text Type
D/HIT RESULT: null 9
D/InputMethodManager: HSIFW - flag : 0
D/HIT RESULT: null 0
D/InputMethodManager: HSIFW - flag : 0
D/HIT RESULT: null 0
D/InputMethodManager: HSIFW - flag : 0
D/HIT RESULT: null 0
D/InputMethodManager: HSIFW - flag : 0
D/HIT RESULT: null 0
// 0 Is Unknown Type
解决方案
我认为您需要在监听事件之后使用mWebview.requestFocus
和使用流程。Handler
请参阅:https://developer.android.com/reference/android/webkit/WebView#requestFocus(int,%20android.graphics.Rect)
和示例:如何在 Android WebView 中使用 HitTestResult 获取链接图像的链接 URL(而不是图像 URL)与 Longclick
推荐阅读
- android - 包含对 AndroidX 和旧支持库的引用
- c++ - 将外部包链接为库?
- javascript - Socket.io 只向发起组的用户广播
- sql - 根据条件查找前 N 行 - 动态 LAG
- python - 将重复值合并并拆分为多个列
- scheduled-tasks - 使用 Powershell3 设置多日通知
- c# - 在签名和验证数据中为什么要有原始数据来验证?
- http - 为什么 GitHub Oauth2 Authorization 标头的身份验证方案是 'token' 而不是 'Bearer'?
- java - 如果电子邮件地址已经存在,则注册表单则使用 Springboot 和 Jpa 抛出异常
- javascript - router.navigate(url) 不加载组件,但直接在浏览器中输入 url