web-dev-qa-db-fra.com

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

J'utilise une vue Web pour présenter des éléments formatés 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 touche longue. Malheureusement, onLongTouch, dans Android 2.3 les poignées pour la sélection de texte sont affichées.

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

52
janoliver

Je l'ai compris !! C'est ainsi que vous pouvez implémenter votre propre écouteur longtouch. Dans la fonction longTouch, vous pouvez appeler 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 marche.

9
janoliver

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 provoquées par le long clic, vous pouvez essayer ceci:

mWebView.setHapticFeedbackEnabled(false);
113
Samuel

Définition de la propriété css du kit Web -webkit-user-select à none résoudrait le problème.

Exemple de CSS pour désactiver la sélection:

* {
   -webkit-user-select: none;
}
31
lhk

Il semble que couper/coller via une pression longue 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 démarrer le 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
crusherjoe

Il semble que la seule option soit de définir onTouchListener et d'écrire votre propre code pour détecter les clics longs. Renvoyez ensuite true s'il s'agit d'un clic long et false sinon.

1
Peter Knego