Comment activer les commandes de zoom et pincer le zoom dans une WebView?


131

L'application Navigateur par défaut pour Android affiche les commandes de zoom lorsque vous faites défiler et permet également un zoom par pincement. Comment puis-je activer cette fonctionnalité pour ma propre vue Web?

J'ai essayé:

webSettings.setBuiltInZoomControls(true);
webSettings.setSupportZoom(true);

mais aucune des fonctionnalités n'est activée en conséquence. Btw j'ai défini un WebChromeClientet un WebViewClientpour la Webview si cela fait une différence.

Merci!

Réponses:


291

Étrange. Dans la méthode OnCreate, j'utilise

webView.getSettings().setBuiltInZoomControls(true);

Et ça marche bien ici. Quelque chose de particulier dans votre webview?


46
Bien que cela permette de pincer pour zoomer, il affichera également une commande de superposition de zoom (Galaxy S3). Afin de désactiver l'outil de zoom à l'écran, tout en conservant la fonctionnalité de pincement pour zoomer, vous devez également appeler webView.setDisplayZoomControls (false).
Lev

49
^webView.getSettings().setDisplayZoomControls(false);
wiseindy

Tout cela ne fonctionne pas pour moi. Essayez ce site Web par exemple: " nbc26.com/robocalls/… ". Cela ne me laisse pas zoomer. Cela fonctionne-t-il vraiment pour vous? s'il vous plaît montrer le code entier pour cela.
développeur android

Si quelqu'un regarde cette réponse et se demande d'où vient l'objet de vue Web, vous pouvez l'obtenir via WebView webView = (WebView) appView.getEngine().getView();comme indiqué dans ce commentaire.
Andrew Dant

Si vous utilisez le rendu de vue Web Xamarin.Android, c'est le code comme ci-dessous Control.Settings.BuiltInZoomControls = true; Control.Settings.SetSupportZoom (vrai); Control.Settings.DisplayZoomControls = false;
Adil Saiyad

94

Utilisez ceux-ci:

webview.getSettings().setBuiltInZoomControls(true);
webview.getSettings().setDisplayZoomControls(false);

1
plus 1, pour la réponse .. m'a aidé.
Akshatha Srinivas

1
Oui, setBuiltInZoomControls (true) et setDisplayZoomControls (false) ont fonctionné pour moi.
Pratik Saluja

34

Vérifiez si vous n'avez pas de ScrollView encapsulant votre Webview .

Dans mon cas, c'était le problème. Il semble que ScrollView gêne le geste de pincement.

Pour résoudre ce problème, prenez simplement votre Webview en dehors de ScrollView .


6
vous avez sauvé ma journée
allemattio

Fonctionne très bien pour moi. Maintenant, je peux supprimer complètement ma vue de défilement imbriquée!
Avi Parshan

cela fonctionne lorsque vous pouvez ajouter android: fillViewport = true <ScrollView android: layout_width = "match_parent" android: layout_height = "match_parent" android: fillViewport = "true">
androidAhmed

4

Dans OnCreate, ajoutez:

 webview.getSettings().setSupportZoom(true);
 webview.getSettings().setBuiltInZoomControls(true);
 webview.getSettings().setDisplayZoomControls(false);

Dans le document html, ajoutez:

<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2, user-scalable=yes">
</head>
</html>

Dans javascript, omettez:

//event.preventDefault ? event.preventDefault() : (event.returnValue = false);

Le booléen par défaut pour setSupportZoom est true, donc inutile webview.getSettings().setSupportZoom(true);par défaut.
زياد

bonne réponse! vous avez mentionné les problèmes liés au HTML, c'est la clé pour résoudre mon problème! Je vous remercie !
Siwei Shen 申思维

4

Pour activer les contrôles de zoom dans une WebView, ajoutez la ligne suivante:

webView.getSettings().setBuiltInZoomControls(true);

Avec cette ligne de code, vous obtenez le zoom activé dans votre WebView, si vous souhaitez supprimer les boutons de zoom avant et de zoom arrière fournis, ajoutez la ligne de code suivante:

webView.getSettings().setDisplayZoomControls(false);

2

Essayez ce code, je fonctionne bien.

 webSettings.setSupportZoom(true);
 webSettings.setBuiltInZoomControls(true);
 webSettings.setDisplayZoomControls(false);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.