Comment définir le zoom/largeur initial pour un webview

j'essaie de faire en sorte que le WebView ait un comportement similaire à celui du navigateur android. Le navigateur ouvre toutes les pages d'une manière qui essaie de faire correspondre leur largeur à l'écran. Cependant, le comportement par défaut de la vue Web est de commencer à une échelle de 100% de pixel donc il commence zoomé dans le coin supérieur gauche.

j'ai passé les dernières heures à essayer de trouver un moyen d'amener le WebView à mettre la page à l'échelle de l'écran comme il le fait dans le navigateur, mais je n'ai pas de chance. Quelqu'un a trouvé un moyen pour accomplir cette?

je vois est un cadre appelé setLoadWithOverviewMode, mais qui ne semble pas faire quoi que ce soit. J'ai également expérimenté avec setInitialScale, mais sur différentes tailles d'écran et les tailles de page web qui ne seront pas aussi gracieux que les navigateurs échelle.

Quelqu'un a une piste?

Merci

EDIT: la méthode de Brian semble fonctionner lorsque le téléphone dans le paysage mais pas dans portrait. En portrait il est proche mais ne correspond toujours pas à l'écran entier dans la page. Je commence cette prime avec l'espoir qu'il y a un moyen sûr-feu pour obtenir le zoom initial pour adapter la page à la largeur de la page dans n'importe quelle orientation ou taille d'écran.

71
demandé sur Tushar Vengurlekar 2010-09-28 03:02:08

6 réponses

le code suivant charge la version de bureau de la page d'accueil de Google entièrement agrandie pour s'adapter dans le webview pour moi dans Android 2.2 sur un écran de 854x480 pixels. Lorsque je réoriente l'appareil et qu'il se recharge en portrait ou paysage, la largeur de la page s'intègre entièrement dans la vue à chaque fois.

BrowserLayout.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

     <WebView android:id="@+id/webview"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent" />
</LinearLayout>
Navigateur

.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);

        String 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();
        }
    }
}
153
répondu Brian 2010-12-01 07:44:36

j'ai compris pourquoi la vue portrait ne remplissait pas totalement le viewport. Du moins dans mon cas, c'était parce que la barre de défilement était toujours visible. En plus du code de viewport ci-dessus, essayez d'ajouter ceci:

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

cela provoque la barre de défilement de ne pas prendre l'espace de mise en page, et permet à la page Web de remplir le viewport.

Espérons que cette aide

19
répondu Dean 2011-07-06 03:02:55

c'est une vieille question mais permettez-moi d'ajouter un détail juste au cas où plus de gens comme moi arriveraient ici.

L'excellente réponse Postée par Brian ne fonctionne pas pour moi dans Jelly Bean. Je dois ajouter aussi:

browser.setInitialScale(30);

le paramètre peut être n'importe quel pourcentage qui réalise que le contenu redimensionné est plus petit que la largeur webview. Puis setUseWideViewPort (true) étend la largeur de contenu au maximum de la largeur de webview.

10
répondu Ivan BASART 2013-02-05 19:03:25

Essayer à l'aide d'une large fenêtre d'affichage :

 webview.getSettings().setUseWideViewPort(true);
6
répondu Brian 2010-09-28 03:21:25

//pour les images et les vidéos en swf utiliser la largeur "100%" et la hauteur en tant que "98%"

mWebView2.getSettings().setJavaScriptEnabled(true);
mWebView2.getSettings().setLoadWithOverviewMode(true);
mWebView2.getSettings().setUseWideViewPort(true);
mWebView2.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
mWebView2.setScrollbarFadingEnabled(true);
2
répondu Ashish Anand 2011-07-06 10:21:20

je travaille avec des images de chargement pour cette réponse et je veux qu'elles soient ajusté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 pour la réponse de Brian n'est pas tout à fait comme je l'aime. Il met beaucoup de blanc espace autour de certaines images sur les téléphones plus anciens, mais fonctionne sur mon plus récent. Voici mon alternative, avec l'aide de cette réponse: est-ce que le WebView D'Android peut redimensionner automatiquement d'énormes images? l'algorithme de mise en page SINGLE_COLUMN est déprécié, mais il fonctionne et je pense qu'il est approprié de travailler avec des webviews plus anciens.

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);
}
1
répondu Fire3galaxy 2017-05-23 11:54:53