Android Webview - la page Web doit correspondre à l'écran de l'appareil

j'ai essayé ce qui suit pour adapter la page Web en fonction de la taille de l'écran de l'appareil.

mWebview.setInitialScale(30);

et ensuite définir le viewport de métadonnées

<meta name="viewport" content="width=320, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; minimum-scale=1.0; user-scalable=0;"/>
<meta name="viewport" content="width=device-width, target-densityDpi=medium-dpi"/>

mais rien ne fonctionne, page Web n'est pas fixé à la taille de l'écran de l'appareil.

quelqu'un Peut-il me dire comment l'obtenir?

84
demandé sur Sergey Glotov 2010-10-12 19:30:31

19 réponses

vous devez calculer l'échelle que vous devez utiliser manuellement, plutôt que de mettre à 30.

private int getScale(){
    Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
    int width = display.getWidth(); 
    Double val = new Double(width)/new Double(PIC_WIDTH);
    val = val * 100d;
    return val.intValue();
}

puis utiliser

WebView web = new WebView(this);
web.setPadding(0, 0, 0, 0);
web.setInitialScale(getScale());
77
répondu danh32 2010-10-12 16:05:34

vous pouvez utiliser ce

    WebView browser = (WebView) findViewById(R.id.webview);
    browser.getSettings().setLoadWithOverviewMode(true);
    browser.getSettings().setUseWideViewPort(true);

cela résout taille en fonction de la taille de l'écran.

252
répondu Tushar Vengurlekar 2011-09-20 05:17:24

amis,

j'ai trouvé beaucoup d'informations importantes de votre part. Mais, la seule façon de travailler pour moi était cette façon:

webView = (WebView) findViewById(R.id.noticiasWebView);
webView.setInitialScale(1);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webView.setScrollbarFadingEnabled(false);
webView.loadUrl("http://www.resource.com.br/");

je travaille sur Android 2.1 en raison du type d'appareils de la société. Mais j'ai résolu mon problème en utilisant la partie des informations de chacun.

Merci!

29
répondu Josmar Peixe 2012-06-27 11:09:17

Essayez avec cette HTML5 conseils

http://www.html5rocks.com/en/mobile/mobifying.html

et avec cela si votre version Android est 2.1 ou plus""

  WebView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
25
répondu josebetomex 2012-02-15 00:26:34

ces réglages ont fonctionné pour moi:

wv.setInitialScale(1);
wv.getSettings().setLoadWithOverviewMode(true);
wv.getSettings().setUseWideViewPort(true);
wv.getSettings().setJavaScriptEnabled(true);

setInitialScale(1) manquait dans mes tentatives.

bien que la documentation indique que 0 va zoomer jusqu'au bout si setUseWideViewPort est défini à vrai mais 0 n'a pas fonctionné pour moi et j'ai dû mettre 1 .

15
répondu Doc 2016-10-07 11:14:41

ceux-ci travaillent pour moi et adaptent le WebView à la largeur de l'écran:

// get from xml, with all size set "fill_parent"  
webView = (WebView) findViewById(R.id.webview_in_layout);  
// fit the width of screen
webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); 
// remove a weird white line on the right size
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);  

Grâce conseille et ligne Blanche dans eclipse Web view

13
répondu Nezneika 2017-05-23 12:03:02

Tout ce que vous devez faire est de simplement

webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
12
répondu Muhammad Aamir Ali 2014-07-17 03:23:46

j'ai le même problème quand j'utilise ce code

webview.setWebViewClient(new WebViewClient() {
}

il se peut que vous devriez supprimer il dans votre code

Et n'oubliez pas d'ajouter 3 modes ci-dessous pour votre webview

    webview.getSettings().setJavaScriptEnabled(true);  
    webview.getSettings().setLoadWithOverviewMode(true);
    webview.getSettings().setUseWideViewPort(true);

cela fixe la taille basée sur la taille de l'écran

11
répondu Linh 2015-08-06 04:31:28
WebView browser = (WebView) findViewById(R.id.webview);
browser.getSettings().setLoadWithOverviewMode(true);
browser.getSettings().setUseWideViewPort(true);
browser.getSettings().setMinimumFontSize(40);

cela fonctionne très bien pour moi puisque la taille du texte a été réglée à really small by .setLoadWithOverViewMode and .setUseWideViewPort.

6
répondu Steve 2014-03-20 12:01:18

vous devez utiliser HTML dans votre webView dans ce cas. J'ai résolu cela en utilisant le code suivant

webView.loadDataWithBaseURL(null,
                "<!DOCTYPE html><html><body style = \"text-align:center\"><img src= "
                        + \"http://www.koenvangorp.be/photos/2005_09_16-moon_2000.jpg\"
                        + " alt=\"pageNo\" width=\"100%\"></body></html>",
                "text/html", "UTF-8", null);
4
répondu Qadir Hussain 2013-01-09 11:30:44

cela ressemble à un problème XML. Ouvrez le document XML contenant votre vue Web. Supprimer le code de remplissage en haut.

puis dans la disposition , ajouter

android:layout_width="fill_parent"
android:layout_height="fill_parent"

dans la vue sur le Web, ajouter

android:layout_width="fill_parent"
android:layout_height="fill_parent" 

cela rend la vue Web compatible avec l'écran de l'appareil.

4
répondu ZakiHacky 2015-10-19 01:48:30

apporter des Modifications à la réponse par danh32 depuis l'écran.getWidth (); est maintenant déprécié.

private int getScale(){
    Point p = new Point();
    Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
    display.getSize(p);
    int width = p.x; 
    Double val = new Double(width)/new Double(PIC_WIDTH);
    val = val * 100d;
    return val.intValue();
}

puis utiliser

WebView web = new WebView(this);
web.setPadding(0, 0, 0, 0);
web.setInitialScale(getScale());
3
répondu Ducktales 2015-04-03 20:45:21
int PIC_WIDTH= webView.getRight()-webView.getLeft();
2
répondu john 2011-10-04 04:32:34

la méthode getWidth de L'objet Display est dépréciée. Outrepasser onSizeChanged pour obtenir la taille de la vue Web quand elle devient disponible.

WebView webView = new WebView(context) {

    @Override
    protected void onSizeChanged(int w, int h, int ow, int oh) {

        // if width is zero, this method will be called again
        if (w != 0) {

            Double scale = Double.valueOf(w) / Double.valueOf(WEB_PAGE_WIDTH);

            scale *= 100d;

            setInitialScale(scale.intValue());
        }

        super.onSizeChanged(w, h, ow, oh);
    }
};
2
répondu SharkAlley 2013-02-01 02:29:54
webview.setInitialScale(1);
webview.getSettings().setLoadWithOverviewMode(true);
webview.getSettings().setUseWideViewPort(true);
webview.getSettings().setJavaScriptEnabled(true);

fonctionnera, mais n'oubliez pas d'enlever quelque chose comme:

<meta name="viewport" content="user-scalable=no"/>

s'il existe dans le fichier html ou modifier user-scalable=yes, sinon il ne sera pas.

2
répondu Hoang Huu 2013-10-18 09:56:53

j'ai eu la vidéo en chaîne html, et la largeur de la vue web était plus grande que la largeur de l'écran et cela fonctionne pour moi.

ajoute ces lignes à la chaîne HTML.

<head>
<meta name="viewport" content="width=device-width">
</head>

résultat après avoir ajouté le code ci-dessus à la chaîne HTML:

<!DOCTYPE html>
<html>

<head>
<meta name="viewport" content="width=device-width">
</head>


</html>
2
répondu Biljana Divljak 2018-04-05 09:41:47

cela aidera à ajuster l'émulateur selon la page Web:

WebView wb;
//CALL THIS METHOD
wb.setInitialScale(50);

vous pouvez régler l'échelle initiale en pourcentage comme indiqué ci-dessus.

1
répondu jagadeesh 2011-12-07 10:26:24

en théorie la combinaison de:

settings.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS); 

avec

settings.setUseWideViewPort(false)

règle le problème, enroule le contenu et s'adapte à l'écran. Mais le NARROW_COLUMNS a été déprécié. Je vous conseille de lire ce fil ci-dessous qui explore la question en détail: https://code.google.com/p/android/issues/detail?id=62378

1
répondu Alécio Carvalho 2014-06-03 22:37:58
WebView webView = (WebView)findViewById(R.id.web_view);
webView.setInitialScale((int) getResources().getDimension(R.dimen._50sdp)); // getActivity(). if you are at Fragment
webView.getSettings().setLoadsImagesAutomatically(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
webView.loadDataWithBaseURL(null,here comes html content,"text/html","UTF-8", null);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setDisplayZoomControls(true);
webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);
-4
répondu Ketan Ramani 2016-12-25 16:27:13