WebView beseitigt Doppeltippen-Zoom.

8

Ich habe viele Tickets zum Thema Zoomen in WebViews gelesen und bin nicht zu einer Antwort für meinen Fall gekommen.

Hier ist mein Setup:

Ich verwende eine benutzerdefinierte Webansicht mit den folgenden Einstellungen:

%Vor%

Lassen Sie mich hier anmerken, dass ich auf OverviewMode und auch auf WideViewPort angewiesen bin, um meine WebView zu skalieren.

Ich überschreibe auch mein OnTouchEvent und delegiere alle geeigneten Ereignisse an einen Gesture-Detektor:

%Vor%

Hier ist seine Listeners-Implementierung, die alle DoubleTap-Ereignisse abfängt:

%Vor%

Auch habe ich diese 2 WebView-Methoden in Bezug auf den Zoom überschrieben:

%Vor%

Unabhängig von all diesen Optionen wird eine bestimmte Tap-Frequenz dazu führen, dass meine Webansicht vergrößert / verkleinert wird. Ich habe keine Option gefunden, die diese Art des Zoomens deaktiviert, das MotionEvent für diesen Zoom scheint jedoch nicht für den GestureDetector anwendbar zu sein, und die Override-Methode zoomIn () zoomOut () hat ebenfalls keine Wirkung.

Kann jemand mir helfen mit einem Weg, um dieses doppelte Tap-Zoom-Verhalten von WebView zu vermeiden?

    
Ostkontentitan 06.09.2012, 13:58
quelle

6 Antworten

5

Es gibt zwei Methoden, um Ihr Ziel zu erreichen:

Methode 1

Implementiere die GestureDetector.OnDoubleTapListener wie folgt:

%Vor%

und hängen Sie es wie folgt an Ihre GestureDetector an:

%Vor%

Methode 2

Sie können auch WebSettings.setUseWideViewPort(false); verwenden und die Größe Ihrer Ansicht manuell berechnen.

Diese Methoden sollen Ihnen helfen, nicht zoombare Webansichten zu erzielen, die alles anzeigen.

%Vor%     
keyboardsurfer 07.09.2012, 11:26
quelle
2

Es gibt eine fantastische Lösung für Ihr Problem, basierend auf Javascript (Sie müssen also Zugriff auf den HTML / JS-Code auf der Remote-Seite haben, wenn dies der Fall ist).

Wenn Sie die FastClick-Bibliothek verwenden, müssen Sie lediglich die .js-Datei hinzufügen und sie dann aufrufen:

%Vor%

Das wird den Doppeltipp-Zoom los, und es gibt (meiner Meinung nach) noch einen großen Bonus: Alle Hähne werden um 0,3 Sekunden schneller, weil das System nicht mehr auf einen Doppeltipp warten muss! Sehen Sie sich dieses Beispiel auf Android an, um den Unterschied zu sehen: Praxisbeispiel

Nun, ich weiß nicht, ob diese Lösung in Ihren Fall passt, aber es war eine perfekte Lösung für meine Webview-Projekte. Hoffe es hilft!

ps1: Sie müssen den obigen Code in allen Seiten und Frames hinzufügen

ps2: Der Pinch-Zoom funktioniert normal weiter

    
Heitor 28.02.2014 05:22
quelle
1

Sie müssen OnTouchListener in Ihrem WebView mit

überschreiben %Vor%

und interne Methode onTouch nur überprüfen, dass, wenn es doppelte Registerkarte erkennen, dann ignorieren Sie den Zoom in der Webansicht mit Gewalt, um True

zurückzugeben %Vor%

Sie können den vollständigen Code wie folgt sehen: MainActivity.java

%Vor%

und activity_main.xml

%Vor%

Vergessen Sie nicht, die Berechtigung in manifest.xml hinzuzufügen

%Vor%     
Sruit A.Suk 11.09.2012 04:50
quelle
0

Ein anderer Ansatz (der einzige, der für mich funktionierte) wäre, entfernte Zwischenabgriffe zwischen Doppelabgriffen zu simulieren, so dass das WebView sie nicht als folgerichtig anerkennt. Zu diesem Zweck können negative Koordinaten verwendet werden, obwohl alles weniger als -1 den Prozess verlangsamen oder sogar unterbrechen würde. Also brauchen wir mindestens zwei Punkte, sagen wir (0, -1) und (2 * d + 1, -1) wobei d der maximale Abstand zwischen den Taps ist, damit sie als Doppeltipp betrachtet werden.

%Vor%     
Danylo Mysak 03.01.2014 12:03
quelle
0

Wenn möglich, ersetzen Sie das statische Meta-Tag in Ihrem HTML:

%Vor%

Zusätzlich können Sie ein nettes Skript verwenden: FastClick
Es wird nicht auf Tap-Ereignisse warten, also ist es schneller.

%Vor%

Setzen Sie dann einen Doppeltipp-Listener auf Ihren Gestendetektor. (in benutzerdefinierten WebView)

%Vor%

Überschreibe die onTouchEvent-Methode (in benutzerdefiniertem WebView):

%Vor%     
bapho 11.02.2015 12:34
quelle
-3

Versuchen Sie, die Rückgabewerte von onDoubleTapEvent onDoubleTap als false zu definieren ....

%Vor%     
Aditya Nikhade 06.09.2012 14:03
quelle