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 ]

4 голосов
/ 03 апреля 2015

Внесение изменений в ответ danh32, так как display.getWidth ();устарела.

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();
}

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

WebView web = new WebView(this);
web.setPadding(0, 0, 0, 0);
web.setInitialScale(getScale());
4 голосов
/ 19 октября 2015

Это похоже на проблему XML.Откройте документ XML, содержащий ваш веб-вид.Удалите код заполнения сверху.

Затем в макете добавьте

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

. В веб-представлении добавьте

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

. Таким образом веб-представление помещается на экране устройства.*

3 голосов
/ 05 апреля 2018

У меня было видео в HTML-строке, и ширина веб-просмотра была больше, чем ширина экрана, и это работает для меня.

Добавьте эти строки в строку HTML.

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

Результат после добавления кода выше в строку HTML:

<!DOCTYPE html>
<html>

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


</html>
2 голосов
/ 22 ноября 2010
int PIC_WIDTH= webView.getRight()-webView.getLeft();
2 голосов
/ 01 февраля 2013

Метод getWidth объекта Display устарел.Переопределите onSizeChanged, чтобы получить размер WebView, когда он станет доступным.

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 голосов
/ 18 октября 2013
webview.setInitialScale(1);
webview.getSettings().setLoadWithOverviewMode(true);
webview.getSettings().setUseWideViewPort(true);
webview.getSettings().setJavaScriptEnabled(true);

будет работать, но не забудьте удалить что-то вроде:

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

если он существует в html-файле или изменить пользовательское масштабирование = да, в противном случае он не будет.

1 голос
/ 07 декабря 2011

Это поможет настроить эмулятор в соответствии с веб-страницей:

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

Вы можете установить начальную шкалу в процентах, как показано выше.

1 голос
/ 04 июня 2014

Теоретически комбинация:

settings.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS); 

с

settings.setUseWideViewPort(false)

решает проблему, оборачивая содержимое и помещая на экран.Но NARROW_COLUMNS устарело.Я советую вам прочитать эту ветку ниже, в которой подробно рассматривается проблема: https://code.google.com/p/android/issues/detail?id=62378

0 голосов
/ 21 июня 2019
  • setLoadWithOverviewMode(true) - загружает веб-представление полностью уменьшенным
  • setUseWideViewPort(true) делает веб-просмотр нормальным окном просмотра (например, обычным браузером на рабочем столе), тогда как при значении false веб-просмотр будет иметь видовое окноограничены собственными размерами (поэтому, если веб-просмотр 50px * 50px, область просмотра будет того же размера)

Подробнее здесь

У меня была ситуациякогда я не был владельцем WebView, я также изменил размер WebView после того, как страница была закончена, в результате у меня возник некоторый побочный эффект с масштабированием.Мое решение:

webView.post(new Runnable() {
    @Override
    public void run() {
        webView.getSettings().setLoadWithOverviewMode(true);
    }
}); 
0 голосов
/ 10 октября 2018

вот обновленная версия, не использующая устаревшие методы, основанная на ответе @ danh32:

protected int getScale(Double contentWidth) {
    if(this.getActivity() != null) {
        DisplayMetrics displaymetrics = new DisplayMetrics();
        this.getActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        Double val = displaymetrics.widthPixels / contentWidth * 100d;
        return val.intValue();
    } else {
        return 100;
    }
}

будет использоваться одинаково:

int initialScale = this.getScale(420d);
this.mWebView.setInitialScale(initialScale);
...