Высота WebView = wrap_content с изменением размера шрифта не работает - PullRequest
7 голосов
/ 19 марта 2012

У меня есть веб-просмотр с layout_height = "wrap_content".Если я увеличу размер шрифта по умолчанию, то увеличится и высота веб-просмотра.Но если я уменьшу размер шрифта по умолчанию, высота веб-просмотра не уменьшится.Так что на дне осталось пустое место.

Я попробовал следующий трюк:

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

Но это не помогло.Я знаю, что есть способ исправить это путем воссоздания WebView с кодом при изменении размера шрифта по умолчанию, но в моей ситуации я не могу сделать это.Мне нужно вести веб-просмотр, потому что ниже приведены некоторые виды, и я тоже не могу их воссоздать.

Ответы [ 7 ]

4 голосов
/ 18 декабря 2015

Единственное найденное мной решение, которое действительно работает, - это клиент com.android.email, который поставляется с Android Open Source Project.Там у них есть RigidWebView, который работает с wrap_content и будет соответственно изменять размер при изменении содержимого.Исходный код для этого можно найти здесь:

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

Вам понадобятся классы Clock и Throttle, которые поставляются с ним, но с небольшими изменениями в коде вы можете сделать этотак что это работает в вашем приложении.Затем в любом месте, где вы обычно определяете WebView, вы можете использовать RigidWebView.

2 голосов
/ 17 апреля 2013

На проблему ссылается система отслеживания проблем Android:
https://code.google.com/p/android/issues/detail?id=18726

Если вам действительно нужен WebView, оборачивающий ваш контент, то на данный момент похоже, что единственным обходным решением является созданиеновый WebView каждый раз, когда меняется ваш контент (что может быть неприемлемо при таргетинге на устройства с низким объемом памяти).Это решение я все равно принял.

1 голос
/ 05 июня 2015

Просто добавьте это

LinearLayout.LayoutParams wv_l =  new 

    LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);

                                wv.setLayoutParams(wv_l);
1 голос
/ 13 октября 2014

Попробуйте,

webview.setVisibility(View.GONE);
webview.setVisibility(View.VISIBLE);
1 голос
/ 15 января 2014

Эта проблема должна быть исправлена ​​в KitKat WebView.

Для версий WebView до KitKat не существует каких-либо хороших обходных путей, о которых я знаю.Изменение ширины WebView должно привести к пересчету высоты, но это также может привести к визуальным сбоям.

Я думаю, что временное форсирование высоты 0 и последующее переключение ее обратно на wrap_contents должно также избавить от лишнего заполнения.

0 голосов
/ 09 октября 2014

Попробуйте следующую комбинацию:

<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 голосов
/ 19 марта 2012

попробуйте

<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>
...