滚动时出现奇怪的 WebView 黑屏闪烁

17

我正在从一个字符串中加载数据,在首次向下滚动webview时会闪烁几次。

这是我的代码,用于加载数据:

webview.loadDataWithBaseURL(null, message.getmContent(), "text/html", "UTF-8", null);

还有XML:

    <WebView
        android:id="@+id/web_content"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_above="@+id/footer"
        android:layout_below="@id/message_title"
        android:layout_margin="4dp"
         />

你是否将你的 Web View 放在了 Scroll View 中?如果是,请尝试移除 Scroll View。 - Akhilesh Mani
尝试 android:focus=false。 - arshad kr
然后设置android:scrollingCache="false"。 - arshad kr
5个回答

34
解决方案是添加:
webview.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
webview.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);

webview.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH); 在API 18中已被弃用。https://dev59.com/mG3Xa4cB1Zd3GeqPaxZX#23896233 - Alécio Carvalho
5
LayerType软件导致我的WebView空白。我能找到的最佳解决方案是使用setBackgroundColor()和一个Color对象(重要的是,不是int)。 - Mdlc
setRenderPriority() 方法在 API 级别 18 中已被弃用。 不建议调整线程优先级,并且这将在未来版本中不再受支持。 - valerybodak

6

在 xml 文件中设置 software 层类型也是可行的,对我来说效果很好。

android:layerType="software"

这是唯一一个对我有效且没有任何缺陷的解决方案。 - Albert Llorens Mestre

1
在解决了上述问题之后,我的WebView在向下滚动时自动聚焦。我通过以下方式解决了闪烁和自动滚动:
webView.setFocusable(false);
webView.setFocusableInTouchMode(false);

0

在XML文件中设置android:minHeight也是可行的,对我来说效果很好。

<WebView
   android:id="@+id/webView"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:minHeight="200dp"/>

0
从缓存中加载数据
webview.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
webview.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
webview.loadUrl(Your URL To Load);

当我使用LOAD_NO_CACHE时,加载会有一点延迟,而且当我们在listView中使用它时,每次重新创建视图都不能很好地避免闪烁,因此我使用了LOAD_CACHE_ELSE_NETWORK来解决这个问题。我也在listview中使用的webview中遇到了相同的闪烁问题。 - Sampath Kumar
你尝试过在ListView中添加android:cacheColorHint="@null"吗? - user1940676

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接