Android Webview - веб-страница должна соответствовать экрану устройства - PullRequest
95 голосов
/ 12 октября 2010

Я попробовал следующее, чтобы подогнать веб-страницу в соответствии с размером экрана устройства.

mWebview.setInitialScale(30);

, а затем установить область просмотра метаданных

<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"/>

Но ничего не работает, веб-страница нефиксированный размер экрана устройства.

Может кто-нибудь сказать мне, как это получить?

Ответы [ 21 ]

270 голосов
/ 20 сентября 2011

Вы можете использовать это

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

Это исправляет размер в зависимости от размера экрана.

80 голосов
/ 12 октября 2010

Вы должны рассчитать шкалу, которую вам нужно использовать вручную, а не устанавливать значение 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();
}

Затем используйте

WebView web = new WebView(this);
web.setPadding(0, 0, 0, 0);
web.setInitialScale(getScale());
30 голосов
/ 29 февраля 2012

Друзья,

Я нашел много информации и полезной информации от вас. Но единственный способ, который работает для меня, был таким:

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/");

Я работаю на Android 2.1 из-за устройств компании. Но я исправил свою проблему, используя часть информации от каждого.

Спасибо тебе!

25 голосов
/ 30 мая 2012

Эти настройки работали для меня:

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

setInitialScale (1) отсутствовал в моих попытках.

Хотя в документации сказано, что 0 полностью уменьшит масштаб, если setUseWideViewPort установлен на true , но 0 не работает для меня, и мне пришлось установить 1 .

25 голосов
/ 15 февраля 2012

Попробуйте с этими советами HTML5

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

И с этим, если ваша версия Android 2.1 или выше

  WebView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
15 голосов
/ 17 июля 2014

Все, что вам нужно сделать, это просто

webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
13 голосов
/ 01 ноября 2012

Это работает для меня и подходит для WebView по ширине экрана:

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

Спасибо выше советам и Белая линия в веб-представлении Eclipse

11 голосов
/ 06 августа 2015

У меня та же проблема, когда я использую этот код

webview.setWebViewClient(new WebViewClient() {
}

, поэтому, возможно, вам следует удалить это в вашем коде
И не забудьте добавить 3 режима ниже для вашего веб-просмотра

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

исправляет размер в зависимости от размера экрана

6 голосов
/ 20 марта 2014
WebView browser = (WebView) findViewById(R.id.webview);
browser.getSettings().setLoadWithOverviewMode(true);
browser.getSettings().setUseWideViewPort(true);
browser.getSettings().setMinimumFontSize(40);

Это прекрасно работает для меня, так как размер текста был установлен очень маленьким с помощью .setLoadWithOverViewMode и .setUseWideViewPort.

5 голосов
/ 09 января 2013

В этом случае вы должны использовать HTML в вашем webView. Я решил это, используя следующий код

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