Désactiver le défilement dans webview?
Jusqu'à maintenant, j'ai été un développeur iPhone uniquement et maintenant, j'ai décidé de donner Android un tourbillon. Quelque chose que je n'ai pas été en mesure de découvrir sur Android est la procédure de programmation pour empêcher le défilement dans un WebView
?
Quelque chose de similaire à l'iphone de prévention de la onTouchMove
événement serait génial!
InformationsquelleAutor Jake Sankey | 2010-03-27
Vous devez vous connecter pour publier un commentaire.
Voici mon code pour la désactivation de tous défilement dans webview:
À seulement masquer les barres de défilement, mais pas de désactiver le défilement:
ou vous pouvez essayer d'utiliser seule colonne mise en page mais cela ne fonctionne qu'avec de simples pages et il désactive le défilement horizontal:
Vous pouvez également essayer de envelopper votre webview avec défilement vertical scrollview et désactiver tous défilement sur la webview:
Et définir
N'oubliez pas d'ajouter le
webview.setOnTouchListener(...)
code ci-dessus pour désactiver tous défilement dans la webview. La verticale de la ScrollView pour permettre le défilement de la WebView du contenu.s can
t de travail pour moi.merci de me donner une solution.MotionEvent.ACTION_MOVE
événements dans votreWebView
voir ma réponse ci-dessous.@Override
suronTouch
, Pas de problème. J'ai édité.ACTION_MOVE
sur lesetOnTouchListener
événement a des effets secondaires, donc je ne recommanderais PAS cette réponse; 1. Glisse rapide sont comptés commeonclick
événements à la page. 2. Empêche le dépassement de capacité de défilement des éléments sur la page, ce qui pourrait être nécessaire pour une bonne interaction en fonction sur le site. 3. La JStouchmove
événement. @GDanger a la réponse correcte qui supplante l'overScrollBy
par l'extension de laWebView
comme il n'a pas de otherside effets, empêche la page de défilement. stackoverflow.com/a/26129301/1244574Je ne sais pas si vous avez encore besoin ou pas, mais voici la solution:
Faire la
WebView
ignorer les événements de mouvement est la mauvaise façon de s'y prendre. Que faire si leWebView
doit entendre parler de ces événements?Au lieu de sous-classe
WebView
et de remplacer les non-privé méthodes de défilement.Si vous regardez la source pour
WebView
vous pouvez voir queonTouchEvent
appelsdoDrag
qui appelle overScrollBy.L'ajout de la marge de détails pour le corps d'empêcher le défilement si votre contenu correctement enveloppements, de la manière suivante:
Assez facile, et beaucoup moins de code + bug généraux 🙂
Définir un écouteur sur votre WebView:
return
ligne. Aussi cela rompt avec HTML5 canvas et JavaScript événements tactiles.event.getAction() != MotionEvent.ACTION_MOVE
ainsi quereturn true
return false
, pasreturn true
.Je n'ai pas essayé ce que je n'ai pas encore rencontrer ce problème, mais peut-être que vous pourriez overrive la onScroll fonction?
Ma sale, mais facile à mettre en œuvre et bien solution de travail:
Il suffit de mettre le webview à l'intérieur d'un scrollview. Faire de la webview trop de plus grand que le contenu possible (dans une ou deux dimensions, selon les besoins). ..et configurer le scrollview de la barre de défilement(s) que vous le souhaitez.
Exemple pour désactiver la barre de défilement horizontale sur une webview:
J'espère que cette aide 😉
Pour Désactiver le défilement utilisez cette
Cela peut ne pas être la source de votre problème, mais j'ai passé des heures à essayer de traquer pourquoi ma demande qui a bien fonctionné sur l'iphone provoquer le navigateur android constamment jeter la verticale ou à l'horizontale, barres de défilement, et en fait de déplacer la page. J'ai eu un corps html de la balise avec la hauteur et la largeur à 100%, et le corps est plein de diverses balises à des endroits différents. Peu importe ce que j'ai essayé, le android les navigateurs ne montrent leurs barres de défilement et de déplacer la page juste un peu de bits, surtout lorsque l'on fait un rapide geste de la main. La solution qui a fonctionné pour moi sans avoir rien à faire dans un APK a été d'ajouter ce qui suit à la balise body:
Il semble que les marges par défaut pour le corps de la balise ont été appliqués sur le droid mais pas sur l'iphone
J'ai résolu le scintillement et la fonction de défilement automatique par:
Cependant, si cela ne fonctionne toujours pas pour une raison quelconque, il suffit de faire une classe qui étend la classe WebView, et de mettre cette méthode:
Je suggère d'étendre WebView, afin de fournir un contrôle plus efficace, à l'instar de désactiver/activer le passage des doigts, activer/désactiver les touches, les auditeurs, le contrôle des transitions, des animations, de définir les paramètres en interne etc..
Si vous sous-classe Webview, vous pouvez simplement remplacer onTouchEvent pour filtrer le déménagement, les événements qui déclenchent le défilement.
étudier les réponses ci-dessus a presque fonctionné pour moi ... mais j'ai toujours eu un problème que j'ai pu "fling' de la vue sur 2.1 (a semblé être fixé avec 2.2 & 2.3).
voici ma solution finale
//Désactiver tous défilement
//Désactiver le défilement horizontale seulement
//Désactiver le défilement verticale seulement
Dans mon cas, la valeur seuil était de 20
Ce devrait être la réponse complète. Comme suggéré par @GDanger .
Étendre WebView pour remplacer le rouleau de méthodes et d'intégrer la coutume webview dans mise en page xml.
Puis les intégrer dans le fichier de configuration comme suit
Puis dans l'Activité, l'utilisation de certaines méthodes supplémentaires pour désactiver les barres de défilement trop.
Suffit d'utiliser
android:focusableInTouchMode="false"
sur votre webView.