首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WebView in ScrollView:“查看太大而不适合绘图缓存”--如何重新设计布局?

WebView in ScrollView:“查看太大而不适合绘图缓存”--如何重新设计布局?
EN

Stack Overflow用户
提问于 2013-08-27 16:43:35
回答 5查看 12.1K关注 0票数 12

我有一个ScrollView布局,它包含以下视图:ImageViewTextViewWebViewTextView。(这是因为我想把所有的内容一起滚动,而不仅仅是WebView的内容)

WebView中加载了一些HTML之后,我收到以下消息:

代码语言:javascript
运行
复制
WARN/View(632): View too large to fit into drawing cache, needs 14236800 bytes, only 1536000 available

...and WebView的内容不会显示。删除ScrollView后,警告就消失了,一切正常,只是我失去了想要的滚动功能。

首先:我知道尝试在另一个ScrollView中使用ScrollView通常是一件坏事,但我不能100%肯定在每一种情况下都有一个不使用ScrollView的等效解决方案.我的意思是,当然可以将ImageViewTextView的内容放入WebView中,但是Button或任何其他需要交互的UI元素呢?是否有一种方法可以解决这样的问题,而不放弃布局,同时滚动所有内容?

我发现我不是唯一一个有这个问题的人。对于其他例子,请检查这些问题--还没有有效的解决方案:

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-01-15 18:06:34

这个问题似乎与硬件加速有关,如果API级别为>= 14,则默认启用硬件加速。

我有一个带有ScrollView的应用程序,它包含许多视图,我想将其作为一个类似于原始海报的单元滚动--其中一个视图是包装其内容的web视图。如果硬件加速启动,并且呈现的WebView非常复杂(图像、边框等),则绘图缓存错误消息可以在LogCat中看到。有些屏幕有12项工作,而下一个屏幕有13项没有工作。我不认为改变的是项目的数量,而是最终呈现屏幕的复杂性。

症状通常是空白的WebView -其他视图是视觉呈现和完全形成。偶尔,我会看到整个屏幕都是空白的,但这可能是在我对此提出各种建议的时候。

人们并不总是能看到这一信息。例如,我在三星Galaxy4Mini上看到了运行4.2.2的问题,而在其他4.x设备上,比如我廉价的中国三星S3克隆版,运行4.1.2,一切都很好。我没有在任何1.x或2.x设备上见过它。

我试着在视图层次结构中的各种视图和布局上选择性地关闭硬件加速,但是最后,由于沮丧和看到我浪费了多少时间来跟踪它,我只是在清单文件中对整个应用程序进行硬件加速。

在关闭硬件加速之后,所有问题都消失了。在我的任何设备上,我都看不到明显的性能差异。假设1.x和2.x设备从一开始就没有使用过硬件加速,而我的4.x设备必须足够快才能处理软件渲染。不是说我的屏幕那么复杂。

更新2015年4月

不幸的是,三星Galaxy4Mini在硬件加速关闭的情况下,已经恢复了4.4.2的警告信息。我有一个JavaScript面板打开/关闭动画的网络视图。除了初始布局(面板打开)引发这些警告外,一切正常,每次我关闭或打开面板时,我也会得到它们。这些警告现在只是恼人,应用程序运行良好。

票数 17
EN

Stack Overflow用户

发布于 2016-02-10 09:08:03

webView.setLayerType(WebView.LAYER_TYPE_NONE, null);

为我工作过。根据硬件的不同,没有剩余的内存用于额外的屏幕外缓冲区,因为WebView完全是在嵌入到另一个滚动视图中时呈现的。

我认为这是Android中的一个缺陷,它不会自动回到这个选项中(速度更慢,但可以工作)。

票数 4
EN

Stack Overflow用户

发布于 2016-05-24 16:09:27

正如其他答案所述,当硬件加速处于活动状态时,就会出现此问题。但对我来说,关闭整个应用程序的硬件加速并不是解决办法。

我想我可以通过将android:layerType="software"设置为ScrollView来解决这个问题,这只会禁用ScrollView及其内容的硬件加速。

代码语言:javascript
运行
复制
<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layerType="software">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            ...
        </FrameLayout>

        <WebView
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>

</ScrollView>

请注意,这可能会带来负面的性能影响,因为在软件中呈现通常要慢一些。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18471194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档