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