web-dev-qa-db-de.com

Android: Deaktivieren Sie die Textauswahl in einer Webansicht

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.

52
janoliver

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.

9
janoliver

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);
113
Samuel

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;
}
31
lhk

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

    });
5
crusherjoe

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.

1
Peter Knego