web-dev-qa-db-fra.com

Contenu enveloppant WebView

Est-il possible de charger une URL dans une WebView et de la redimensionner pour l'adapter à l'écran? Je veux dire que je veux rendre la page Web petite pour que l'utilisateur n'ait pas besoin de faire défiler. Est-ce possible?

30
JaVadid

@ user289751, yalçın

bien amis comme "Christopher" l'a mentionné, un zoom arrière trop important n'est pas quelque chose que l'utilisateur aimerait car cela réduira la lisibilité du contenu affiché ...

je voudrais plutôt suggérer une alternative ... il vaut mieux essayer de régler les commandes de zoom ... ne sais pas si elles fonctionneront en 2.1 ou non ...

webview.getSettings().setBuiltInZoomControls(true);

j'espère que cela résout votre problème ... parce que maintenant vous donnez à l'utilisateur le contrôle de changer le niveau de zoom ...

2
JaVadid

Vous pouvez également essayer de définir un algorithme de mise en page pour le même.

webview.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
18
DeRagan

Réglez l'échelle initiale sur 1. Il effectue ensuite un zoom avant pour remplir l'écran. Je n'ai pas testé comment cela fonctionne sur des sites Web vraiment grands (articles de blog avec beaucoup de commentaires par exemple), mais cela fonctionne sur un Droid X et un HTC Aria avec une page Web standard.

WebView.setInitialScale(1);

Je continuerai de tester avec différentes pages Web, mais jusqu'à présent, c'est la meilleure solution que j'ai pour ce problème.

EDIT: Testé avec une page Web incroyablement longue sur Droid X et Aria et a obtenu des résultats positifs sur les deux. La définition de l'échelle initiale à 0 semble désactiver le tout, ce qui entraîne une échelle initiale de 100. Je suis satisfait de ces résultats, j'espère que cela aidera d'autres personnes aux prises avec ce problème.

16
cesarislaw
wb.getSettings().setLoadWithOverviewMode(true);
wb.getSettings().setUseWideViewPort(true);
9
Sujith Mohan
webview_settings.setLoadWithOverviewMode(true);
webview_settings.setUseWideViewPort(true);
webview_settings.setBuiltInZoomControls(true);
4
exiquio

Avez-vous essayé d'appeler simplement WebView.zoomOut() jusqu'à ce qu'il renvoie false?

De plus, je voudrais noter que cette technique que vous souhaitez utiliser repose vraiment sur le fait que la page Web est assez courte. Si la page est longue et que vous effectuez un zoom arrière pour l'adapter entièrement à l'écran, l'utilisateur aura besoin d'une très bonne vue! ;)

2
Christopher Orr

J'ai pu contenir la page entière à mon avis en procédant comme suit. Définissez d'abord la largeur et la hauteur sur wrap_content. Ensuite, définissez l'échelle initiale à un comme ceci:

WebView webview = (WebView) currentActivity.findView(R.layout.web_view, R.id.webview);
webview.setInitialScale(1);

J'ai trouvé que je pouvais obtenir cela pour garder la largeur au minimum nécessaire pour afficher une police lisible, puis faire défiler la coordonnée y à chaque fois en procédant comme suit. Définissez d'abord la hauteur et la largeur sur wrap_content. Réglez ensuite la densité de zoom à fond dans votre code comme ceci:

WebView webview = (WebView) currentActivity.findView(R.layout.web_view, R.id.webview);
webview.getSettings().setDefaultZoom(ZoomDensity.FAR);

C'est probablement la meilleure solution la plupart du temps. Considérez la taille de la police si vous affichez la page Web suivante dans son intégralité:

2
webview.setInitialScale(number);

là où le "nombre" est élevé, plus votre page sera agrandie. commencez par des nombres inférieurs (comme 10) et ajustez au goût

1
smoothwalsh

Utilisez ce code pour redimensionner votre vue Web en fonction de l'écran.

setScrollContainer (false);

1
Rishabh Agrawal

Je l'ai fait fonctionner dans une boîte de dialogue utilisant WRAP_CONTENT pour les deux dimensions de la WebView, malheureusement lorsque la page Web devient trop grande, la vue Web pousse tous mes autres widgets hors de l'écran.

Le système de mise en page d'Android est sacrément peu intuitif!

0
Timmmm