Domanda

Sto cercando di ottenere il WebView ad avere un comportamento simile come il browser di Android. Il browser apre tutte le pagine in modo che cerca di adattare la loro larghezza allo schermo. Tuttavia, il comportamento predefinito del WebView è partire scala pixel 100% per cui comincia ingrandita in alto a sinistra.

Ho trascorso gli ultimi paio d'ore cercando di trovare un modo per ottenere il WebView per ridimensionare la pagina allo schermo come fa nel browser, ma non sto avendo alcuna fortuna. Qualcuno ha trovato un modo per ottenere questo?

che vedo è un ambiente chiamato setLoadWithOverviewMode, ma che non sembra fare nulla. Ho anche sperimentato con setInitialScale ma su diverse dimensioni dello schermo e la pagina web dimensioni che non sarà così grazioso come scalare i browser.

Ogni uno ha qualche indizio?

Grazie

EDIT: il metodo di Brian sembra funzionare quando il telefono in orizzontale ma non in verticale. Nel ritratto è vicino, ma ancora non si adatta l'intero schermo nella pagina. Ho iniziando questa abbondanza con la speranza c'è un modo infallibile per ottenere lo zoom iniziale per adattare la pagina alla larghezza della pagina in qualsiasi orientamento o dimensione dello schermo.

È stato utile?

Soluzione

I seguenti carichi di codice la versione desktop della home page di Google completamente rimpicciolita per adattarsi all'interno del webview per me in Android 2.2 su uno schermo 854x480 pixel. Quando ho Riorientare il dispositivo e si ricarica in verticale o orizzontale, la pagina di larghezza si adatta totalmente all'interno della vista ogni volta.

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

Altri suggerimenti

ho capito il motivo per cui la vista ritratto non è stato del tutto riempiendo la finestra. Almeno nel mio caso, è stato perché la barra di scorrimento è stato sempre visibile. In aggiunta al codice finestra sopra, prova ad aggiungere questo:

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

Questo fa sì che la barra di scorrimento di non occupare spazio il layout, e permette la pagina web per riempire la finestra.

Spero che questo aiuti

E 'e vecchia questione, ma permettetemi di aggiungere un dettaglio nel caso in cui più persone come me arrivare qui.

La risposta eccellente inviato da Brian non funziona per me a Jelly Bean. Devo aggiungere anche:

browser.setInitialScale(30);

Il parametro può essere qualsiasi percentuale tha realizza che il contenuto ridimensionata è inferiore alla larghezza webview. Poi setUseWideViewPort (true) estende la larghezza del contenuto al massimo della larghezza webview.

utilizzando un'ampia finestra :

 webview.getSettings().setUseWideViewPort(true);

// per immagini e video SWF utilizzano la larghezza come "100%", e l'altezza come "98%"

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

sto lavorando con il caricamento di immagini per questa risposta e voglio loro di essere scalati alla larghezza del dispositivo. Trovo che, per i telefoni più vecchi con le versioni meno di API 19 (KitKat), il comportamento per la risposta di Brian non è del tutto come piace a me. Si mette un sacco di spazio bianco attorno ad alcune immagini su telefoni più vecchi, ma funziona sulla mia uno più recente. Ecco la mia alternativa, con l'aiuto di questa risposta: WebView di Can Android ridimensionare automaticamente le immagini enormi? L'algoritmo di layout SINGLE_COLUMN è deprecato, ma funziona e mi sento come è opportuno per lavorare con visualizzazioni anziani.

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

Se si ha la visualizzazione Web capito, ma le immagini sono ancora fuori scala, la soluzione migliore che ho trovato ( qui ) era semplicemente anteponendo il documento con:

<style>img{display: inline; height: auto; max-width: 100%;}</style>

Come risultato tutte le immagini vengono scalati in base alla larghezza vista web.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top