Comment définir le zoom / largeur initial pour une vue Web

J’essaie de faire en sorte que WebView ait un comportement similaire à celui du navigateur Android. Le navigateur ouvre toutes les pages de manière à adapter leur largeur à l’écran. Cependant, le comportement par défaut de WebView est de commencer à une échelle de pixels de 100%, de sorte qu’il commence à zoomer dans le coin supérieur gauche.

J’ai passé les deux dernières heures à essayer de trouver un moyen pour que WebView redimensionne la page à l’écran comme dans le navigateur, mais je n’ai pas de chance. Quelqu’un at-il trouvé un moyen d’y parvenir?

Je vois est un paramètre appelé setLoadWithOverviewMode, mais cela ne semble rien faire du tout. J’ai également expérimenté avec setInitialScale mais sur différentes tailles d’écran et tailles de pages Web qui ne seront pas aussi gracieuses que la mise à l’échelle des navigateurs.

Quelqu’un at-il des pistes?

Merci

EDIT: La méthode de Brian semble fonctionner lorsque le téléphone est en paysage mais pas en portrait. En portrait, il est proche mais ne correspond toujours pas à l’ensemble de l’écran de la page. Je commence cette prime avec l’espoir qu’il existe un moyen sûr d’obtenir le zoom initial pour que la page corresponde à la largeur de la page dans n’importe quelle orientation ou taille d’écran.

Le code suivant charge la version de bureau de la page d’accueil Google entièrement webview pour tenir dans la vue webview pour moi dans Android 2.2 sur un écran de 854 x 480 pixels. Lorsque je réoriente le périphérique et qu’il se recharge en mode portrait ou paysage, la largeur de la page s’inscrit entièrement dans la vue à chaque fois.

BrowserLayout.xml:

     

Browser.java:

 import android.app.Activity; import android.os.Bundle; import android.webkit.WebView; public class Browser extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.BrowserLayout); Ssortingng loadUrl = "http://www.google.com/webhp?hl=en&output=html"; // initialize the browser object WebView browser = (WebView) findViewById(R.id.webview); browser.getSettings().setLoadWithOverviewMode(true); browser.getSettings().setUseWideViewPort(true); try { // load the url browser.loadUrl(loadUrl); } catch (Exception e) { e.printStackTrace(); } } } 

J’ai compris pourquoi la vue en portrait ne remplissait pas totalement la fenêtre d’affichage. Au moins dans mon cas, c’était parce que la barre de défilement était toujours affichée. En plus du code de la fenêtre d’affichage ci-dessus, essayez d’append ceci:

  browser.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); browser.setScrollbarFadingEnabled(false); 

La barre de défilement ne prend donc pas de place dans l’espace de présentation et permet à la page Web de remplir la fenêtre d’affichage.

J’espère que cela t’aides

C’est une question ancienne, mais permettez-moi d’append un détail au cas où d’autres personnes comme moi arriveraient ici.

L’excellente réponse de Brian ne fonctionne pas pour moi dans Jelly Bean. Je dois append aussi:

 browser.setInitialScale(30); 

Le paramètre peut être tout pourcentage que le contenu redimensionné est inférieur à la largeur de la vue Web. Ensuite, setUseWideViewPort (true) étend la largeur du contenu au maximum de la largeur de la vue Web.

Essayez d’ utiliser une large fenêtre d’affichage :

  webview.getSettings().setUseWideViewPort(true); 

// pour les images et les vidéos swf, utilisez la largeur “100%” et la hauteur “98%”

 mWebView2.getSettings().setJavaScriptEnabled(true); mWebView2.getSettings().setLoadWithOverviewMode(true); mWebView2.getSettings().setUseWideViewPort(true); mWebView2.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); mWebView2.setScrollbarFadingEnabled(true); 

Je travaille avec le chargement d’images pour cette réponse et je souhaite qu’elles soient adaptées à la largeur de l’appareil. Je trouve que, pour les téléphones plus anciens avec des versions inférieures à API 19 (KitKat), le comportement de la réponse de Brian n’est pas tout à fait comme je l’aime. Il met beaucoup d’espace autour de certaines images sur les téléphones plus anciens, mais fonctionne sur les nouvelles. Voici mon alternative, avec l’aide de cette réponse: WebView d’Android peut automatiquement redimensionner des images énormes? L’algorithme de mise en page SINGLE_COLUMN est obsolète, mais il fonctionne et je pense qu’il est approprié pour travailler avec d’anciennes vues Web.

 WebSettings settings = webView.getSettings(); // Image set to width of device. (Must be done differently for API < 19 (kitkat)) if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { if (!settings.getLayoutAlgorithm().equals(WebSettings.LayoutAlgorithm.SINGLE_COLUMN)) settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); } else { if (!settings.getLoadWithOverviewMode()) settings.setLoadWithOverviewMode(true); if (!settings.getUseWideViewPort()) settings.setUseWideViewPort(true); }