Как установить начальный масштаб/ширину для веб-просмотра

Я пытаюсь заставить WebView иметь подобное поведение как браузер для Android. Браузер открывает все страницы таким образом, чтобы их ширина соответствовала ширине экрана. Однако поведение WebView по умолчанию должно начинаться со 100-процентной шкалы пикселей, поэтому оно начинает увеличиваться в верхнем левом углу.

Я провел последние пару часов, пытаясь найти способ заставить WebView масштабировать страницу на экране, как в браузере, но мне не повезло. Кто-нибудь нашел способ сделать это?

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

У любого есть какие-либо выводы?

Спасибо

EDIT: метод Брайана, похоже, работает, когда телефон находится в ландшафте, но не в портрете. В портрете он близок, но все равно не подходит для всего экрана на странице. Я начинаю эту награду с надеждой, что есть верный способ получить начальное масштабирование, чтобы оно соответствовало ширине страницы в любой ориентации или размере экрана.

Ответ 1

Следующий код загружает версию настольной версии главной страницы Google, полностью уменьшенную, чтобы она помещалась в webview для меня в Android 2.2 на экране с разрешением 854x480 пикселей. Когда я переориентирую устройство и перезаряжаю его в портретной или альбомной ориентации, ширина страницы полностью вписывается в представление каждый раз.

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>

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

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

Ответ 2

Я понял, почему портретный вид не полностью заполняет окно просмотра. По крайней мере, в моем случае это было потому, что полоса прокрутки всегда показывалась. В дополнение к коду просмотра выше, добавьте это:

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

Это приводит к тому, что полоса прокрутки не занимает пространство макета и позволяет веб-странице заполнять область просмотра.

Надеюсь, что это поможет

Ответ 3

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

Отличный ответ, который написал Брайан, не работает для меня в желе Bean. Я должен добавить также:

browser.setInitialScale(30);

Параметр может быть любым процентом, который достигается тем, что размер измененного содержимого меньше ширины веб-просмотра. Затем setUseWideViewPort (true) расширяет ширину содержимого до максимальной ширины веб-просмотра.

Ответ 5

//для изображений и swf-видео используется ширина как "100%" и высота как "98%"

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

Ответ 6

Я работаю с загрузкой изображений для этого ответа, и я хочу, чтобы их масштабировали до ширины устройства. Я нахожу, что для старых телефонов с версиями, меньшими, чем API 19 (KitKat), поведение для ответа Брайана не совсем так, как мне нравится. Он помещает много пробелов вокруг некоторых изображений на старых телефонах, но работает на моем новом. Вот моя альтернатива, с помощью этого ответа: Может ли WebView WebView автоматически изменять размеры огромных изображений? Алгоритм компоновки SINGLE_COLUMN устарел, но он работает, и я чувствую, что он подходит для работы со старыми веб-просмотрами.

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