2010-09-27 17 views
67

Estoy intentando que el WebView tenga un comportamiento similar al del navegador android. El navegador abre todas las páginas de una manera que intenta ajustar su ancho a la pantalla. Sin embargo, el comportamiento predeterminado de WebView es comenzar en una escala de 100% de píxeles, por lo que comienza con el zoom en la esquina superior izquierda.Cómo configurar el zoom/ancho inicial para una vista web

He pasado las últimas dos horas tratando de encontrar una manera de hacer que WebView amplíe la página a la pantalla como lo hace en el navegador, pero no estoy teniendo suerte. Alguien ha encontrado una manera de lograr esto?

Veo es una configuración llamada setLoadWithOverviewMode, pero parece que no hace nada. También experimenté con setInitialScale pero en diferentes tamaños de pantalla y tamaños de página web que no serán tan elegantes como la escala de los navegadores.

¿Alguien tiene alguna pista?

Gracias

EDIT: método de Brian parece que funciona cuando el teléfono en el paisaje, pero no en el retrato. En el retrato está cerca, pero todavía no se ajusta a toda la pantalla en la página. Empiezo esta recompensa con la esperanza de que haya una forma segura de lograr que el zoom inicial se ajuste a la página con el ancho de la página en cualquier orientación o tamaño de pantalla.

+0

encontró una solución para esto. – Samuel

+0

@Sam, sí, la solución aceptada a continuación funciona para mí. – cottonBallPaws

+0

por alguna razón pasé todo un día alrededor de esto y funcionó solo en api7 y no arriba. Finalmente tuve que implementar el mismo usando setInitialScale y calculando la escala inicial manualmente. Por cierto, tenía una sola imagen con dimensiones de 480x800. – Samuel

Respuesta

150

El siguiente código carga la versión de escritorio de la página principal de Google totalmente reducida a encajar dentro de la webview para mí en Android 2.2 en una pantalla de 854x480 píxeles. Cuando reorienta el dispositivo y se vuelve a cargar en vertical u horizontal, el ancho de la página se ajusta por completo a la vista cada vez.

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

Gracias Brian, parece estar funcionando a primera vista. Voy a probar varios sitios más antes de recompensar la recompensa, ¡pero esto parece prometedor! – cottonBallPaws

+0

Esta fue una gran ex explicación. +1 – Tarik

+0

buena respuesta + 1 – DeRagan

6

Trate using a wide viewport:

webview.getSettings().setUseWideViewPort(true); 
+1

Gracias, parece que va en la dirección correcta. Eso en sí mismo no pareció hacer nada, pero con la combinación de setInitialScale (50) funcionó perfectamente en portrait. Sin embargo, sosteniendo el teléfono en horizontal, no se ajusta a la pantalla. ¿Hay otras configuraciones que debería usar además de esa? Esto es lo que tengo actualmente: setBuiltInZoomControls (true), setUseWideViewPort (true), setInitialScale (50). Me gustaría que se ajuste bien a la pantalla sin importar el tamaño o la densidad de la pantalla. Gracias de nuevo. – cottonBallPaws

+0

no funciona para mí ... –

2

// para imágenes y vídeos SWF utilice anchura como "100%" y la altura como "98%"

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

¿Por qué altura al 98%? – hotshot309

+0

me pueden ayudar en este https://stackoverflow.com/questions/49098464/loading-gif-in-webview-not-adjusting-to-webview – Stuart2041

19

Descubrí por qué la vista de retrato no llenaba totalmente la ventana gráfica. Al menos en mi caso, fue porque la barra de desplazamiento siempre se mostraba. Además del código de vista anterior, trate de añadir esto:

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

Esto hace que la barra de desplazamiento para no ocupan espacio de diseño, y permite que la página web para llenar la ventana.

Esperanza esto ayuda

9

Es cuestión y viejo, pero permítanme añadir un detalle por si acaso más gente como yo llegue aquí.

La excelente respuesta publicada por Brian no funciona para mí en Jelly Bean. Tengo que añadir también:

browser.setInitialScale(30); 

El parámetro puede ser cualquier porcentaje tha logra que el contenido redimensionada es menor que la anchura vista web. Luego setUseWideViewPort (true) amplía el ancho del contenido al máximo del ancho de la vista web.

+0

Mi página web que se muestra en la vista web consiste en mucho Javascript, se parece más a OSD en TV, widgets con botones. Utilicé su solución y tengo 2 comentarios al respecto: 1. la primera carga de la vista web no es correcta, la vista web es negra 2. La segunda es correcta, pero puedo hacer doble clic y eso es algo que no quiero , porque escala los widgets y los botones dejan de funcionar en ese momento. ¿Alguna ayuda que puedas brindar? Gracias. – MartinC

+0

Debe tenerse en cuenta que el valor predeterminado de 'WebView.setInitialScale (int)' es 0 no 100. [Enlace a la documentación] (https://developer.android.com/reference/android/webkit/WebView.html# setInitialScale (int)) – DBX12

1

Estoy trabajando con la carga de imágenes para esta respuesta y quiero que se adapten al ancho del dispositivo. Me parece que, para los teléfonos más antiguos con versiones inferiores a API 19 (KitKat), el comportamiento de la respuesta de Brian no es exactamente como me gusta. Coloca muchos espacios en blanco alrededor de algunas imágenes en teléfonos más antiguos, pero funciona en mi versión más nueva. Aquí está mi alternativa, con la ayuda de esta respuesta: Can Android's WebView automatically resize huge images? El algoritmo de diseño SINGLE_COLUMN está en desuso, pero funciona y creo que es apropiado para trabajar con webviews anteriores.

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