2012-03-19 21 views
6

Ho una webview con layout_height = "wrap_content". Se aumento la dimensione del carattere predefinito, aumenta anche l'altezza della webview. Ma se diminuisco la dimensione del carattere predefinito, l'altezza della webview non diminuisce. Quindi c'è spazio vuoto sul fondo rimanente.Altezza WebView = wrap_content con la modifica della dimensione del carattere non funziona

Ho provato seguente trucco:

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

Ma non ha aiutato. So che c'è un modo per risolverlo ricreando WebView con un codice quando cambio la dimensione predefinita del carattere, ma nella mia situazione non posso farlo. Devo mantenere la webview, perché ci sono alcuni punti di vista che non sono in grado di ricreare.

+1

Avere lo stesso problema con una WebView in una ScrollView quando si carica con contenuti di diverse lunghezze. Forse non è intelligente usarlo in una ScrollView però ... –

risposta

-6

provare questo

<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

che cosa esattamente dovrebbe aiutare? wraping webview in layout lineare o impostazione witdh wrap content e height fill genitore? – Dmitriy

+0

Non posso accettare quella risposta.La domanda chiede come impostarla su "wrap_content" e suggerisci invece un'altezza fissa (fill_parent). Ovviamente poi la webview ha un'altezza costante ... –

+0

@Dmitriy come hai risolto questo problema? –

2

La questione si fa riferimento issue tracker di Android qui:
https://code.google.com/p/android/issues/detail?id=18726

Se ciò che si vuole veramente è un WebView avvolgendo il contenuto sembra che l'unico lavoro intorno al momento è quello di creare una nuova visualizzazione Web ogni volta che il contenuto cambia (che potrebbe non essere accettabile quando si scelgono dispositivi con poca memoria). È la soluzione che ho adottato comunque.

+0

Google lo ha contrassegnato come fisso da KitKat 4.4, ma non l'ho ancora testato. –

1

Questo problema dovrebbe essere risolto in KitKat WebView.

Per le versioni di WebView precedenti a KitKat non ci sono soluzioni valide che conosco. Alterare la larghezza di WebView dovrebbe forzare un ricalcolo dell'altezza, ma potrebbe anche portare a problemi visivi.

Penso che forzare temporaneamente un'altezza di 0 e quindi girarlo di nuovo a wrap_contents dovrebbe eliminare anche l'imbottitura in eccesso.

+1

Sto riscontrando lo stesso problema, La mia app di visualizzazione web dovrebbe avere dimensioni di carattere diverse, quando aumento la dimensione del carattere e poi torno alla dimensione del carattere minore, la visualizzazione Web causa così tanto spazio vuoto. C'è un modo per aggiustarlo ??? –

-3

Provare la seguente combinazione:

<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

Questa risposta è stata contrassegnata come di bassa qualità a causa della sua lunghezza e del suo contenuto - aggiungere un po 'di spiegazione potrebbe aiutare. – Jordan

1

Prova questa,

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

Basta aggiungere questo

LinearLayout.LayoutParams wv_l = new 

    LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT); 

           wv.setLayoutParams(wv_l); 
+0

Non funziona per me. Lo spazio bianco era ancora lì. – YeeKhin

+1

controlla il tuo html interno con i bordi css linea rossa per controllare se qualcosa ha a che fare con la pagina stessa .. – aimiliano

3

L'unica soluzione che ho trovato che funziona, è nel client com.android.email fornito con il progetto Open Source Android. Lì, hanno una RigidWebView che funziona con wrap_content e ridimensionerà di conseguenza quando il contenuto cambia. Il codice sorgente per questo può essere trovato qui:

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

Avrete bisogno l'orologio e le classi della valvola a farfalla che vengono con esso, ma con piccole modifiche al codice, si può fare in modo che funziona nella vostra app . Quindi, in qualsiasi punto in cui si definirà normalmente una WebView, è possibile utilizzare invece RigidWebView.

Problemi correlati