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