Ich verwende eine Webansicht, um einige formatierte Inhalte in meiner App zu präsentieren. Für einige Interaktionen (die für bestimmte dom-Elemente spezifisch sind) verwende ich Javascript und WebView.addJavascriptInterface()
. Jetzt möchte ich eine lange Berührung erkennen. Leider, onLongTouch
, werden in Android 2.3 die Ziehpunkte für die Textauswahl angezeigt.
Wie kann ich diese Textauswahl ausschalten ohne das onTouchListener
setzen und true zurückgeben? (Dann funktioniert die Interaktion mit der "Website" nicht mehr.
Ich habe es herausgefunden!! So können Sie Ihren eigenen Longtouchlistener implementieren. In der Funktion longTouch können Sie Ihre Javascript-Oberfläche aufrufen.
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!
}
Das funktioniert.
Das hat bei mir funktioniert
mWebView.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
return true;
}
});
mWebView.setLongClickable(false);
Ich habe nicht getestet, wenn Sie nicht möchten, dass die Vibration durch das lange Klicken verursacht wird, können Sie Folgendes versuchen:
mWebView.setHapticFeedbackEnabled(false);
Festlegen der Webkit-CSS-Eigenschaft -webkit-user-select
zu none
würde das Problem lösen.
Beispiel-CSS zum Deaktivieren der Auswahl:
* {
-webkit-user-select: none;
}
Es scheint, dass Ausschneiden/Einfügen durch langes Drücken deaktiviert ist, wenn Sie verwendet haben
articleView.setWebChromeClient(new WebChromeClient(){...})
Siehe https://bugzilla.wikimedia.org/show_bug.cgi?id=31484
Wenn Sie setChromeClient verwenden und lange klicken möchten, um das Kopieren/Einfügen zu starten, gehen Sie wie folgt vor:
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();
}
});
Es scheint, dass die einzige Möglichkeit darin besteht, onTouchListener
zu setzen und Ihren eigenen Code zu schreiben, um einen langen Klick zu erkennen. Geben Sie dann true
zurück, wenn es sich um einen langen Klick handelt, und false
, wenn dies nicht der Fall ist.