2012-03-19 12 views
6

Mam webview z layout_height = "wrap_content". Jeśli zwiększę domyślny rozmiar czcionki, wzrośnie również wysokość widoku. Ale jeśli zmniejszę domyślny rozmiar czcionki, wysokość widoku nie zmniejsza się. Na dole pozostaje puste miejsce.Wysokość WebView = wrap_content ze zmieniającym się rozmiarem czcionki nie działa

Próbowałem następujący trick:

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

Ale to nie pomogło. Wiem, że jest sposób, aby to naprawić, odtwarzając WebView z kodem, gdy zmieniam domyślny rozmiar czcionki, ale w mojej sytuacji nie mogę tego zrobić. Muszę zachować podgląd strony internetowej, ponieważ są tam pewne widoki i nie mogę ich odtworzyć.

+1

Mając ten sam problem z WebView w ScrollView podczas ładowania go o zawartości o różnej długości. Może to nie jest mądre, aby użyć go w ScrollView ... –

Odpowiedz

-6

spróbować

<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

co dokładnie powinno to pomóc? zawijanie widoku WWW do układu liniowego lub ustawianie zawartości owiniętej witdh i wypełnienia nadrzędnego? – Dmitriy

+0

Nie mogę przyjąć tej odpowiedzi.Pytanie pyta, jak ustawić "wrap_content" i sugerujesz zamiast tego stałą wysokość (fill_parent). Oczywiście wtedy przeglądanie internetowe ma stałą wysokość ... –

+0

@Dmitriy jak rozwiązałeś ten problem? –

2

Kwestia odwołuje emisyjnej tracker Androida tutaj:
https://code.google.com/p/android/issues/detail?id=18726

Jeśli to, co naprawdę chcesz to WebView owijania treść wygląda tylko obejście u Chodzi o to, aby za każdym razem, gdy zmieniła się zawartość, utworzyć nowy WebView (co może nie być akceptowalne przy kierowaniu na urządzenia z niską pamięcią). Jest to rozwiązanie, które i tak przyjąłem.

+0

Google oznaczył go jako poprawiony od wersji KitKat 4.4, ale nie testowałem jeszcze. –

1

Ten problem należy naprawić w witrynie KitKat WebView.

Dla wersji WebView przed KitKatem nie ma żadnych dobrych obejść, które znam. Zmiana szerokości WebView powinna wymuszać ponowne obliczanie wysokości, ale może również prowadzić do wizualnych usterki.

Myślę, że tymczasowe wymuszenie wysokości 0, a następnie odwrócenie jej do wrap_contents powinno również pozbyć się nadmiernego wypełnienia.

+1

Mam ten sam problem, Moja aplikacja do przeglądania stron internetowych ma mieć inny rozmiar czcionki, gdy zwiększam rozmiar czcionki, a następnie powracam do mniejszego rozmiaru czcionki, widok internetowy powoduje tak dużo pustej przestrzeni. Czy istnieje sposób, aby to naprawić? –

-3

Spróbuj następującą kombinację:

<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

Ta odpowiedź została oznaczona jako niskiej jakości ze względu na jej długość i zawartość - pomocne może być dodanie odrobiny wyjaśnień. – Jordan

1

spróbować,

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

Wystarczy dodać ten

LinearLayout.LayoutParams wv_l = new 

    LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT); 

           wv.setLayoutParams(wv_l); 
+0

To nie działa dla mnie. Biała przestrzeń wciąż tam była. – YeeKhin

+1

sprawdź w swoim wewnętrznym html z czerwoną linią css border, aby sprawdzić, czy cokolwiek ma wspólnego z samą stroną. – aimiliano

3

Jedyne rozwiązanie, które udało mi się znaleźć, działa w kliencie com.android.email dołączonym do projektu Android Open Source. Tam mają RigidWebView, który działa z wrap_content i zmieni odpowiednio rozmiar, gdy zawartość się zmieni. Kod źródłowy na ten temat można znaleźć tutaj:

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

Musisz zegara i przepustnicą klas, które się z nią, ale z niewielkimi zmianami w kodzie, można je więc to działa w aplikacji . W dowolnym miejscu, w którym normalnie zdefiniujesz WebView, możesz zamiast tego użyć RigidWebView.

Powiązane problemy