我正在使用webview在我的应用中显示一些格式化的内容。对于某些交互(特定于某些dom元素),我使用javascript和WebView.addJavascriptInterface()
。现在,我想要认识一下。不幸的是,onLongTouch
,在Android 2.3中显示了文本选择的句柄。
如何在没有设置onTouchListener
的情况下关闭此文本选择并返回true? (然后,与“网站”的互动不再有效。
答案 0 :(得分:108)
这对我有用
mWebView.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
return true;
}
});
mWebView.setLongClickable(false);
我没有测试过,如果你不想长按一下造成振动,你可以试试这个:
mWebView.setHapticFeedbackEnabled(false);
答案 1 :(得分:29)
将webkit css属性-webkit-user-select
设置为none
可以解决问题。
禁用选择的示例CSS:
* {
-webkit-user-select: none;
}
答案 2 :(得分:8)
我想通了!!这就是你如何实现自己的longtouchlistener。在函数longTouch中,您可以调用javascript界面。
var touching = null;
$('selector').each(function() {
this.addEventListener("touchstart", function(e) {
e.preventDefault();
touching = window.setTimeout(longTouch, 500, true);
}, false);
this.addEventListener("touchend", function(e) {
e.preventDefault();
window.clearTimeout(touching);
}, false);
});
function longTouch(e) {
// do something!
}
这很有效。
答案 3 :(得分:5)
如果您使用
,似乎关闭长按的剪切/粘贴 articleView.setWebChromeClient(new WebChromeClient(){...})
请参阅https://bugzilla.wikimedia.org/show_bug.cgi?id=31484
因此,如果您使用的是setChromeClient,并且您想要长时间点击以开始复制/粘贴,请执行以下操作:
webView.setWebChromeClient(new WebChromeClient(){
[.... other overrides....]
// @Override
// https://bugzilla.wikimedia.org/show_bug.cgi?id=31484
// If you DO NOT want to start selection by long click,
// the remove this function
// (All this is undocumented stuff...)
public void onSelectionStart(WebView view) {
// By default we cancel the selection again, thus disabling
// text selection unless the chrome client supports it.
// view.notifySelectDialogDismissed();
}
});
答案 4 :(得分:1)
似乎唯一的选择是设置onTouchListener
并编写自己的代码来检测长按。如果是长按,则返回true
,否则返回false
。
答案 5 :(得分:0)
另一种解决方案是将WebView子类化,并在以下方面覆盖performLongClick:
public class AdvanceWebView extends WebView {
//Add constructors...
@Override
public boolean performLongClick() {
return true;
}
}
答案 6 :(得分:0)
对于Kotlin,我发现以下方法可以工作:
webView.isLongClickable = false