Android:禁用webview中的文本选择

时间:2011-02-24 16:41:41

标签: android webview

我正在使用webview在我的应用中显示一些格式化的内容。对于某些交互(特定于某些dom元素),我使用javascript和WebView.addJavascriptInterface()。现在,我想要认识一下。不幸的是,onLongTouch,在Android 2.3中显示了文本选择的句柄。

如何在没有设置onTouchListener的情况下关闭此文本选择并返回true? (然后,与“网站”的互动不再有效。

7 个答案:

答案 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