Domanda

Ho provato quanto segue per adattare la pagina web in base alle dimensioni dello schermo del dispositivo.

mWebview.setInitialScale(30);

e quindi impostare i metadati finestra

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

Ma non funziona nulla, pagina web non è fissato alle dimensioni dello schermo del dispositivo.

Qualcuno può dirmi come ottenere questo?

È stato utile?

Soluzione

Si deve calcolare la scala che è necessario utilizzare manualmente, piuttosto che impostare a 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();
}

Quindi utilizzare

WebView web = new WebView(this);
web.setPadding(0, 0, 0, 0);
web.setInitialScale(getScale());

Altri suggerimenti

È possibile utilizzare questo

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

queste dimensioni correzioni in base alle dimensioni dello schermo.

Amici,

Ho trovato un sacco di importazione e di grandi informazioni da voi. Ma, l'unico modo in cui funziona per me è stato in questo modo:

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

Sto lavorando su Android 2.1 a causa del tipo di dispositivi da parte della società. Ma ho risolto il mio problema utilizzando la parte di informazioni da ciascuno di essi.

Grazie voi!

Queste impostazioni funzionato per me:

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

setInitialScale (1) mancava nei miei tentativi.

Anche se la documentazione dice che 0 ingrandire tutta la via d'uscita, se setUseWideViewPort è impostato su true ma 0 non ha funzionato per me e ho dovuto impostare 1 .

Prova con questo punte HTML5

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

E con questo se la versione Android è 2.1 o superiore

  WebView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);

Tutto quello che dovete fare è semplicemente

webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);

Questi lavori per me e per montare il WebView alla larghezza dello schermo:

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

Grazie sopra consiglia e linea bianca in Eclipse visualizzazione Web

Ho lo stesso problema quando uso questo codice

webview.setWebViewClient(new WebViewClient() {
}

in modo da può essere si dovrebbe Rimuovi nel codice
E ricordarsi di aggiungere 3 modalità di seguito per la visualizzazione web

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

queste dimensioni correzioni in base alle dimensioni dello schermo

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

Questa grande opera per me dal momento che la dimensione del testo è stato impostato su davvero piccolo da .setLoadWithOverViewMode e .setUseWideViewPort.

È necessario utilizzare HTML nel WebView in questo caso. Ho risolto questo seguente codice usando

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

Modifiche alla risposta da parte danh32 dal momento che il display.getWidth (); è ora deprecato.

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

Quindi utilizzare

WebView web = new WebView(this);
web.setPadding(0, 0, 0, 0);
web.setInitialScale(getScale());

Questo mi sembra un problema di XML. Aprire il documento XML che contiene il Web-View. Eliminare il codice imbottitura in alto.

Poi nel layout, aggiungi

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

Nel Web-View, aggiungi

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

Questo rende il Web-View adatta allo schermo del dispositivo.

ho avuto il video nella stringa HTML, e la larghezza di vista web era più grande che la larghezza dello schermo e questo sta lavorando per me.

Aggiungi queste righe a stringa HTML.

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

Risultato dopo aver aggiunto sopra il codice a stringa HTML:

<!DOCTYPE html>
<html>

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


</html>
int PIC_WIDTH= webView.getRight()-webView.getLeft();

Il metodo getWidth dell'oggetto di visualizzazione è deprecato. Override onSizeChanged per ottenere la dimensione del WebView quando diventa disponibile.

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);
    }
};
webview.setInitialScale(1);
webview.getSettings().setLoadWithOverviewMode(true);
webview.getSettings().setUseWideViewPort(true);
webview.getSettings().setJavaScriptEnabled(true);

funzionerà, ma ricordate di togliere qualcosa come:

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

se esisteva nel file html o il cambiamento user-scalable = yes, altrimenti no.

Questo aiuto sarà a regolare l'emulatore in base alla pagina web:

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

È possibile impostare la scala intial in percentuale come indicato sopra.

In teoria la combinazione di:

settings.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS); 

con

settings.setUseWideViewPort(false)

risolve il problema, avvolgendo il contenuto e raccordo per lo schermo. Ma il NARROW_COLUMNS è stato deprecato . vi consiglio di leggere questa discussione al di sotto che esplora la questione in dettaglio: https: //code.google.com/p/android/issues/detail?id=62378

Ecco una versione aggiornata, non utilizzando metodi deprecati, sulla base di @ danh32 risposta:

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

da utilizzare allo stesso modo:

int initialScale = this.getScale(420d);
this.mWebView.setInitialScale(initialScale);
  • setLoadWithOverviewMode(true) - carica il WebView completamente ingrandito
  • setUseWideViewPort(true) rende i Webview hanno una vista normale (ad esempio un normale browser desktop), mentre quando falsa WebView avrà una finestra vincolato alle proprie dimensioni (quindi se la WebView è 50px * 50px la finestra sarà la stessa dimensione )

Per saperne di più qui

Ho avuto una situazione in cui non ero un proprietario di WebView, anche io ridimensionato WebView dopo pagina era stato completato, come risultato ho avuto qualche effetto collaterale con lo zoom. La mia soluzione è:

webView.post(new Runnable() {
    @Override
    public void run() {
        webView.getSettings().setLoadWithOverviewMode(true);
    }
}); 
WebView webView = (WebView)findViewById(R.id.web_view);
webView.setInitialScale((int) getResources().getDimension(R.dimen._50sdp)); // getActivity(). if you are at Fragment
webView.getSettings().setLoadsImagesAutomatically(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
webView.loadDataWithBaseURL(null,here comes html content,"text/html","UTF-8", null);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setDisplayZoomControls(true);
webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top