我有一个
WebView
,它显示了位于assets文件夹中的本地HTML页面。这个WebView
是Activity
中更大布局的一部分。我试图允许用户将EditText
小部件中的文本拖动到WebView
中的输入元素中。除了将拖动监听器接收到的屏幕坐标转换为document.elementFromPoint
使用的屏幕坐标之外,一切都很好。它们不匹配。它会将文本放入比用户手指更远的输入框中。任何帮助都将不胜感激。警告:我的JavaScript知识非常差。
基本流程:
WebView
的onDrag事件捕获ACTION_DROP事件。- 将事件的x、y位置传递给JavaScript函数
- JavaScript函数根据点找到元素并更新值
在我的Activity中:
private class OnWebViewDragListener implements OnDragListener {
public boolean onDrag(View v, DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DROP:
String dropText = event.getClipData().getItemAt(0).getText().toString();
mJavaScript._dropText(mWebView, dropText, event.getX(), event.getY());
return true;
default:
break;
}
return false;
}
}
Javascript包装器:
public void _dropText(WebView wv, String text, float x, float y) {
wv.loadUrl("javascript:dropText('" + text + "', " + x + ", " + y + ")");
}
Javascript函数:
<script type="text/javascript">
function dropText(text, x, y) {
var elem = document.elementFromPoint(x, y);
if (elem.tagName == "INPUT") {
elem.value = text;
}
}
</script>
cssX = viewX / window.devicePixelRatio; cssY = viewY / window.devicePixelRatio
。这假设 HTML 视口填充了整个 Webview。 - hldev