J'ai un webview qui utilise les commandes de zoom intégrées, comme suit: Remarque: Ceci active deux fonctions principales - Pinch-à-zoom et InvokezoomPicker () (Ce dernier n'est appelé que lorsqu'une action de balayage est effectuée à la vue, une simple touche ne l'active pas) p> Et je veux aussi que les choses se produisent lorsque des événements touchés se produisent, en utilisant ce qui suit. P>
wv.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
wv.invokeZoomPicker();
Log.i("touch", "touched!");
return false;
}
});
11 Réponses :
C'est le plus proche que je puisse arriver à une solution à ce problème. Je devais définir la mise au point d'entrée sur le Webview chaque fois que cela a été touché. La seule façon dont je puisse le faire était d'étendre webview et de remplacer la fonction d'Ontouchevent. Cette fonction est appelée même après que le zoom est utilisé dans le Webview.
webView = (NewWebView) findViewById(R.id.new_web_view);
Désolé de ne pas me débrouiller plus tôt, mais j'ai enfin eu la chance de tester ce code, malheureusement cette méthode ne reçoit pas encore ONTTOUCH
J'ai eu le même problème, mais j'ai réussi à le résoudre en définissant à nouveau l'auditeur dans ma classe webview étendue: Malheureusement, j'ai le problème opposé à ce que le zoom contrôle ( Le widget Plus / Minus) ne reçoit plus d'événements tactiles. Il semble y avoir une certaine exclusivité entre la présentation d'un Ontouchlistener et d'un zoom, au moins dans Android SDK Niveau 8 (Froyo 2.2). P> Cela ressemble à un bug pour moi, mais aimerais trouver une solution de contournement. p> p>
Je pense qu'il y a une certaine exclusivité, par exemple, pour une vue Web 500x500 et vous l'avez effectuée sur 1000x1000, puis vous l'avez touchée, maintenant quelle position doit-elle signaler? p>
Mais j'ai vraiment besoin de les faire travailler ensemble. P>
Une solution sale consiste à couvrir une vue invisible sur la vue de votre Web et à détecter des touches. Vous devez distinguer si le toucher est consommé ou renvoyez FALSE pour passer des touches sur la vue Web sous-jacente. P>
Cela a très bien fonctionné pour moi. Je viens de faire un
code> 'S
ecouchlistener cod> et le rendit renvoyé
false code>.
La solution de contournement est assez simple.
Vous devez créer une classe personnalisée qui étend l'une des sous-classes de groupe de vie comme linearlayout. Puis remplacez-vous sur Onterceptouchevent - il sera appelé avant le groupe d'observation de l'enfant d'enfant. Il n'est pas très élégant de mettre un contrôle WebView dans votre sous-classe de groupe de vie personnalisé, puis de l'insérer dans la hiérarchie de la vue de l'activité - où elle est souhaitée, mais ça marche.
J'ai eu un problème similaire où mise à jour: p> Onchouch code> ne serait pas appelé après avoir utilisé pinch pour zoomer em>. Inspiré par
@Override
public boolean onTouch(View v, MotionEvent event) {
return touchListener.onTouch(v, event);
}
Votre code ne compile pas pour moi dans une classe webview webview - il est indiqué que la méthode AOUTTOUCH est indéfinie. Avez-vous mis en place une méthode d'AOULISONTU dans la sous-classe WebView vous-même? Si votre exemple serait donc plus clair avec un commentaire à la place de l'appel AOUTTOUCH ().
Je l'ai vérifié et j'ai en effet une méthode aschoue () code> dans la classe extension webview, de sorte que la classe
implémente Ontouchlistener code>.
J'ai eu le même problème de zoom que Stijn.v. J'ai utilisé le code dans sa réponse, mais j'avais toujours un problème avec le touchlistener parfois réglé sur NULL. Voici ma classe WebView complète, testée sur Android 4.0 - 4.3
bookWebview.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return mGestureDetector.onTouchEvent(event); } });
Essayez
youWebView.getSettings().setBuiltInZoomControls(false);
J'ai rencontré le même problème, et j'ai étendu webview et créer mon propre ONTouchlistener pour éviter ce bogue. Par exemple:
Classe publique BookknowBevage étend webview { } p> p>
Donc, après avoir rencontré le même problème moi-même, j'ai essayé de donner un sens à certaines de ces réponses à rien en vain. Le problème à portée de main est qu'une fois que l'utilisateur invoque le défilement (non pinch-zoom) (au moins pour moi ...), l'instance WebView perd sa référence d'Ontchlistener. Comment ai-je compris cela? Eh bien ...
Webview hérite de Dispatchtouchevent () à partir de la vue. Dispatchtouchevent appelle aschououch () (quelle est la fonction qui ne tire pas qui devrait) P>
La raison pour laquelle Aoudouch () n'était pas appelée, comme je l'ai déjà dit que l'Ontouchlistener d'instance WebView était devenu NULL pour certaines raisons. Cela peut être vu en mettant un point d'arrêt dans la méthode DispatchTouchevent () de la vue P>
afin de résoudre ce problème, nous étendons webview comme: p> et nous Implémentez Notre ONTOUCHLISTENER: P> import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.webkit.WebView;
public class WebTouchListener implements OnTouchListener {
@Override
public boolean onTouch(View v, MotionEvent event) {
WebView.HitTestResult hr = ((TouchWebView)v).getHitTestResult();
//Log.i(TAG, "getExtra = "+ hr.getExtra() + "\t\t Type=" + hr.getType());
if (event.getAction() == MotionEvent.ACTION_DOWN) {
System.out.println(hr.getExtra() + " " + hr.getType());
}
// TODO Auto-generated method stub
return false;
}
}
fonctionne parfaitement bien pour moi. Il suffit d'utiliser Ontouchevent (événement MotionEvent) au lieu d'AOUTTOUCH (View V, événement MotionEvent). Fonctionne même si SetBuiltInzoomControls est défini sur True. P>
J'ai le même problème. Avez-vous déjà trouvé une solution pour cela?
Malheureusement je ne l'ai pas encore compris