我有一个ScrollView布局,其中包含以下视图:ImageView,TextView,WebView,TextView. (这是因为我想将整体滚动起来,而不仅仅是WebView的内容)
在WebView中加载一些HTML后,我收到以下内容:
WARN/View(632): View too large to fit into drawing cache, needs 14236800 bytes, only 1536000 available
…并且不会显示WebView的内容.删除ScrollView后,警告消失,一切都很好,除了我失去了想要的滚动功能.
第一:我知道在一般情况下尝试在另一个ScrollView中使用ScrollView是一件坏事,但我不是百分之百确定在每种情况下都有一个不使用ScrollView的等效解决方案…我的意思是,当然可以放一个将ImageViews和TextViews的内容放入WebView中,但是按钮或任何其他需要交互的UI元素呢?有没有一种方法可以解决这样的问题而不放弃布局并一次滚动所有内容?
我发现我不是唯一有这个问题的人.对于其他示例,请检查这些问题 – 尚未使用解决方案:
解决方法:
该问题似乎与硬件加速相关联,如果API级别> = 14,则默认启用硬件加速.
我有一个带有ScrollView的应用程序,其中包含许多视图,我想将其作为一个单独的单元滚动,类似于原始海报 – 其中一个视图是包含其内容的Web视图.如果启用了硬件加速并且渲染的WebView完全复杂(图像,边框等),则可以在LogCat中看到绘图缓存错误消息.一些屏幕有12个项目工作,而下一个屏幕有13个项目不起作用.我不认为它产生差异的项目数量,但最终渲染屏幕的复杂性.
症状通常是一个空白的WebView – 其他视图在视觉上呈现并完整形成.偶尔我看到整个屏幕都是空白的,但这可能是因为我在这里找到了各种各样的建议.
消息并不总是被看到.例如,我在运行4.2.2的三星Galaxy 4 Mini上看到问题,而在其他4.x设备上,例如运行4.1.2的廉价中文三星S3克隆,一切都很好.我没有在任何1.x或2.x设备上看到它.
我尝试在视图层次结构中有选择地关闭各种视图和布局上的硬件加速,但最后只是在清单文件中为整个应用程序的硬件加速转出了挫折,并看到我浪费了多少小时跟踪它.
关闭硬件加速后,所有问题都消失了.我发现我的任何设备都没有明显的性能差异.据推测,1.x和2.x设备从未使用硬件加速,而我的4.x设备必须足够快以应对仅软件渲染.不是说我的屏幕那么复杂.
2015年4月更新
不幸的是,即使关闭了硬件加速,现在运行4.4.2的三星Galaxy 4 Mini也会显示警告消息.我有一个带有JavaScript面板打开/关闭动画的webview.一切正常,除了初始布局(面板打开)引发这些警告,每次我关闭或打开面板我也得到它们.这些警告现在只是烦人,应用程序工作正常.
标签:android,drawingcache