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!

Robert Bana
la source

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?

zov
la source
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);
Dario Brux
la source
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 .

Tiago
la source
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);
Jarir
la source
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);
Anubhav
la source
2

Essayez ce code, je fonctionne bien.

 webSettings.setSupportZoom(true);
 webSettings.setBuiltInZoomControls(true);
 webSettings.setDisplayZoomControls(false);
Muhammed Haris
la source