Pregunta

He intentado lo siguiente para ajustarse a la página web basado en el tamaño de la pantalla del dispositivo.

mWebview.setInitialScale(30);

y, a continuación establece los metadatos ventana gráfica

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

Pero las obras nada, página web no está fijado al tamaño de la pantalla del dispositivo.

Puede alguien decirme cómo conseguir esto?

¿Fue útil?

Solución

Se tiene que calcular la escala que necesita utilizar manualmente, en lugar de establecer 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();
}

A continuación, utilice

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

Otros consejos

Puede utilizar este

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

correcciones de este tamaño en función del tamaño de la pantalla.

Amigos,

He encontrado una gran cantidad de importación y grandes información de usted. Sin embargo, la única forma en que funciona para mí fue de esta manera:

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

Estoy trabajando en Android 2.1 debido a la clase de los dispositivos de la empresa. Pero me fijo mi problema utilizando parte de la información de cada uno.

Gracias usted!

Estos ajustes trabajado para mí:

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

setInitialScale (1) faltaba en mis intentos.

A pesar de que la documentación dice que 0 zoom a tope si setUseWideViewPort se define en true y 0 no funcionó para mí y tuve que conjunto 1 .

Trate con este consejos HTML5

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

Y con esto si su versión es Android 2.1 o superior

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

Todo lo que necesita hacer es simplemente

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

Estos funcionan para mí y se ajusta a la anchura de la pantalla de vista Web:

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

Gracias por encima de en Eclipse vista Web

Tengo mismo problema cuando se utiliza este código

webview.setWebViewClient(new WebViewClient() {
}

así que puede ser que debiera Eliminar en su código
Y recuerde agregar 3 modos siguientes para su vista web

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

correcciones de este tamaño en función del tamaño de la pantalla

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

Esto funciona muy bien para mí ya que el tamaño del texto se ha establecido en muy pequeña por .setLoadWithOverViewMode y .setUseWideViewPort.

Usted tiene que usar HTML en su web View en este caso. He resuelto esto usando siguiente código

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

Realizar cambios en la respuesta por danh32 ya que el display.getWidth (); ahora está en desuso.

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

A continuación, utilice

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

Esto parece como un problema de XML. Abra el documento XML que contiene su Web-View. Eliminar el código de relleno en la parte superior.

A continuación, en el diseño, añadir

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

En la Web permite visualizar, añadir

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

Esto hace que el Web-View acopla a la pantalla del dispositivo.

tuve vídeo en cadena HTML, y el ancho de la página we era más grande que la anchura de la pantalla y esto está funcionando para mí.

Añadir estas líneas a cadena HTML.

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

Resultado después de añadir el código anterior a cadena HTML:

<!DOCTYPE html>
<html>

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


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

está en desuso El método getWidth del objeto de visualización. Anulación onSizeChanged para obtener el tamaño de la vista web en cuanto esté disponible.

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

funcionará, pero no olvide quitar algo como:

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

si existía en el archivo html o el cambio de usuario escalable = sí, de lo contrario no lo hará.

Esto ayudará a ajustar el emulador de acuerdo a la página web:

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

Se puede configurar la escala intial en porcentaje como se muestra arriba.

En teoría, la combinación de:

settings.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS); 

con

settings.setUseWideViewPort(false)

soluciona el problema, envolviendo el contenido y ajuste a la pantalla. Sin embargo, el NARROW_COLUMNS ya no se utiliza . Yo te aconsejo leer este hilo de abajo que explora el tema en detalle: https: //code.google.com/p/android/issues/detail?id=62378

aquí está una versión actualizada, no utilizar métodos obsoletos, en base a la respuesta de @ 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;
    }
}

para ser utilizado por igual:

int initialScale = this.getScale(420d);
this.mWebView.setInitialScale(initialScale);
  • setLoadWithOverviewMode(true) - cargas de la vista Web completamente has alejado
  • setUseWideViewPort(true) hace que los Webview tienen una ventana normal (como por ejemplo un navegador de escritorio normal), mientras que cuando es falsa la vista web tendrá un puerto de vista restringido a sus propias dimensiones (por lo que si la vista web es 50px * 50px la ventana gráfica será el mismo tamaño )

aquí

Yo tenía una situación en la que yo no era un propietario de WebView, que también cambia de tamaño WebView tras página se había terminado, como resultado tuve algún efecto secundario con zoom. Mi solución es:

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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top