2012-03-19 32 views
6

Tengo vista web con layout_height = "wrap_content". Si aumente el tamaño de fuente predeterminado, la altura de la vista web también aumentará. Pero si disminuyo el tamaño de fuente predeterminado, la altura de la vista web no disminuirá. Entonces hay espacio vacío en el fondo restante.WebView height = wrap_content con cambiar el tamaño de fuente no funciona

He intentado siguiente truco:

articleContent.getSettings().setDefaultFontSize(fontSize); 
RelativeLayout.LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
layoutParams.addRule(RelativeLayout.BELOW, subtitleTextView.getId()); 
articleContent.setLayoutParams(layoutParams); 

Pero no sirvió de nada. Sé que hay una manera de solucionarlo recreando WebView con un código cuando cambio el tamaño de fuente predeterminado, pero en mi situación no puedo hacer eso. Necesito mantener la vista web, porque hay algunas vistas debajo y no puedo recrearlas también.

+1

Tiene el mismo problema con un WebView en un ScrollView cuando lo carga con contenidos de diferentes longitudes. Tal vez no es inteligente usarlo en ScrollView ... –

Respuesta

-6

probar esto

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 
<WebView 
    android:id="@+id/webview1" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" /> 

</LinearLayout> 
+0

¿Qué debería ayudar esto exactamente? wraping webview en diseño lineal o ajuste con contenido wrap y altura fill parent? – Dmitriy

+0

No puedo aceptar esa respuesta.La pregunta pregunta cómo configurarlo para "wrap_content" y usted sugiere una altura fija en su lugar (fill_parent). Por supuesto, entonces la vista web tiene una altura constante ... –

+0

@Dmitriy ¿cómo se solucionó este problema? –

2

La cuestión es referenciado seguimiento de incidencias de Android aquí:
https://code.google.com/p/android/issues/detail?id=18726

Si lo que realmente quiere es una vista Web envolver su contenido parece que el único trabajo en torno a la momento es crear una nueva WebView cada vez que su contenido cambie (lo que puede no ser aceptable cuando se enfoca en dispositivos con poca memoria). Es la solución que he adoptado de todos modos.

+0

Google lo marcó fijo desde KitKat 4.4, pero aún no lo he probado. –

1

Este problema debería solucionarse en el KitKat WebView.

Para las versiones WebView anteriores a KitKat no hay ninguna solución alternativa que conozca. Alterar el ancho de WebView debería forzar un recálculo de altura, pero también podría ocasionar fallas visuales.

Creo que forzar temporalmente una altura de 0 y luego voltearla de nuevo a wrap_contents también debería eliminar el exceso de relleno.

+1

Tengo el mismo problema, se supone que mi aplicación de vista web tiene un tamaño de fuente diferente, cuando aumento el tamaño de la fuente y luego retrocedo el tamaño de letra más pequeño, la vista web causa mucho espacio vacío. ¿¿¿Hay alguna forma de arreglarlo??? –

-3

Prueba la siguiente combinación:

<LinearLayout 
    android:id="@+id/xxxxxxxxxxxxxxxxxxx" 
    android:layout_width="match_parent" 
    android:layout_height="200dp" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/yyyyyyyyyyyyyyyyyyyyy" 
     style="@style/Etiquetas" 
     android:text="@string/hola" /> 

    <WebView android:paddingLeft="10dp" 
     android:id="@+id/zzzzzzzzzzzzzzz" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@null" > 
    </WebView> 

</LinearLayout> 

Java:

LinearLayout. LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT); 
xxxxxxxxxxxxxxxxxxx.setLayoutParams(params); 
WebView zzzzzzzzzzzzzzz = (WebView) findViewById(R.id.zzzzzzzzzzzzzzz); 
zzzzzzzzzzzzzzz.setBackgroundColor(0x00000000); 
zzzzzzzzzzzzzzz.loadData(Html.fromHtml(mistringsqlite).toString(), "text/html", null); 
+0

Esta respuesta se ha marcado como de baja calidad debido a su longitud y contenido; agregar un poco de explicación podría ayudar. – Jordan

1

probar esto,

webview.setVisibility(View.GONE); 
webview.setVisibility(View.VISIBLE); 
1

Sólo añadir esta

LinearLayout.LayoutParams wv_l = new 

    LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT); 

           wv.setLayoutParams(wv_l); 
+0

No funciona para mí. El espacio en blanco todavía estaba allí. – YeeKhin

+1

revisa tu html interno con css borders línea roja para comprobar si algo tiene que ver con la página en sí. – aimiliano

3

La única solución que he encontrado que realmente funciona, está en el cliente com.android.email que viene con el Proyecto de Código Abierto de Android. Allí, tienen una RigidWebView que funciona con el wrap_content y cambiará de tamaño según corresponda cuando cambie el contenido. El código fuente para esto se puede encontrar aquí:

https://android.googlesource.com/platform/packages/apps/Email/+/c19c1226da4a32e49e81c202478384f0348bcfef/src/com/android/email/view/RigidWebView.java

Necesitará el reloj y clases de acelerador que vienen con él, pero con pequeños cambios en el código, puede que sea por lo que funciona en su aplicación . Luego, en cualquier lugar donde normalmente definiría un WebView, puede usar RigidWebView en su lugar.

Cuestiones relacionadas