Android: désactiver la sélection de texte dans une vue Web

J'utilise un webview pour présenter des choses formatées dans mon application. Pour certaines interactions (qui sont spécifiques à certains éléments dom), j'utilise javascript et WebView.addJavascriptInterface(). Maintenant, je veux reconnaître une longue touche. Malheureusement, onLongTouch, Dans Android 2.3, les poignées de sélection de texte sont affichées.

Comment puis-je désactiver cette sélection de texte Sans définir le onTouchListener et retourner true? (Ensuite, l'interaction avec le "site web" ne fonctionne plus.

43
demandé sur ROMANIA_engineer 2011-02-24 19:41:40

5 réponses

Cela a fonctionné pour moi

mWebView.setOnLongClickListener(new OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
        return true;
    }
});
mWebView.setLongClickable(false);

Je n'ai pas testé, si vous ne voulez pas les vibrations causées par le clic long, vous pouvez essayer ceci:

mWebView.setHapticFeedbackEnabled(false);
94
répondu Samuel 2018-03-27 13:00:33

Définir la propriété CSS webkit -webkit-user-select sur {[2] } résoudrait le problème.

Exemple CSS pour désactiver la sélection:

* {
   -webkit-user-select: none;
}
29
répondu lhk 2011-10-03 18:49:40

J'ai compris!! C'est ainsi que vous pouvez implémenter votre propre longtouchlistener. Dans la fonction longTouch vous pouvez faire un appel à votre interface 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!
}

Cela fonctionne.

8
répondu janoliver 2011-02-24 18:21:49

Il semble que Couper / Coller par appui long est désactivé si vous avez utilisé

    articleView.setWebChromeClient(new WebChromeClient(){...})

Voir https://bugzilla.wikimedia.org/show_bug.cgi?id=31484

Donc, si vous utilisez setChromeClient et que vous voulez avoir un clic long pour commencer à copier / coller, procédez comme suit:

    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();
        }

    });
5
répondu crusherjoe 2012-04-19 17:04:57

Il semble que la seule option est de définir onTouchListener et d'écrire votre propre code pour détecter le clic long. Ensuite, retournez {[1] } si c'est un clic long et false sinon.

1
répondu Peter Knego 2011-02-24 16:48:12