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



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



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



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



У кого-нибудь есть зацепки?



спасибо



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

1296   6  

6 ответов:

следующий код загружает настольную версию домашней страницы 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>

браузер.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();
        }
    }
}

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

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

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

надеюсь, что это помогает

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

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

browser.setInitialScale(30);

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

попробовать используя широкий видовой экран:

 webview.getSettings().setUseWideViewPort(true);

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

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

Я работаю с загрузкой изображений для этого ответа, и я хочу, чтобы они были масштабированы до ширины устройства. Я считаю, что для старых телефонов с версиями меньше, чем API 19 (KitKat), поведение для ответа Брайана не совсем так, как мне нравится. Это ставит много пробелов вокруг некоторых изображений на старых телефонах, но работает на моем новом. Вот моя альтернатива, с помощью этого ответа:может Андроид 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);
}

Comments

    Ничего не найдено.