64 votes

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

Je suis l'aide d'une webview présenter quelques formaté trucs dans mon application. Pour certains, l'interaction (qui sont spécifiques à certains éléments du dom) j'utilise javascript et WebView.addJavascriptInterface(). Maintenant, je veux reconnaître une longue touche. Malheureusement, onLongTouch, en Android 2.3 les poignées pour la sélection de texte sont affichés.

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

Meilleures salutations et merci d'avance, Jan Oliver Oelerich

141voto

Samuel Points 4472

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 la vibration provoquée par le long clic, vous pouvez l'essayer.

 mWebView.setHapticFeedbackEnabled(false);
 

44voto

lhk Points 69

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

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

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

9voto

janoliver Points 2595

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.

6voto

crusherjoe Points 41

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

    });
 

0voto

Peter Knego Points 57985

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X