在Android-L中将WebView绘制到Canvas中

osa*_*gan 6 android chromium android-webview android-5.0-lollipop

我正在使用Android Print Framework将WebView的HTML内容保存为PDF.由于Android-L中的WebView有一种渲染WebView内容的新方法,因此建议在创建任何webview之前调用enableSlowWholeDocumentDraw()方法.这将禁用渲染优化,因此WebView将能够呈现整个HTML页面.

以下是将WebView绘制到Canvas中的代码部分.

PdfDocument.Page page = document.startPage(pageInfo);
mWebView.draw(page.getCanvas());
Run Code Online (Sandbox Code Playgroud)

我尝试WebView.enableSlowWholeDocumentDraw()从Application,BaseActivity以及在Fragment中创建WebView之前和之后调用.但这没有帮助.

我尝试通过将Layer Type设置为SOFTWARE和HARDWARE来启用/禁用硬件加速,但这也无济于事.我仍然无法绘制整个WebView.只有可见部分将被绘制到画布.

有人注意到这种行为吗?有没有解决方案或这是一个Bug?

编辑

事实证明,它不是关于WebView.enableSlowWholeDocumentDraw(),我们仍在讨论这个问题.这是错误报告.以下是重现问题的示例应用程序.

Mik*_*nov 2

您需要在应用程序中创建任何WebView.enableSlowWholeDocumentDraw()WebView之前调用。

也就是说,如果静态布局中的某处有 WebView,请确保WebView.enableSlowWholeDocumentDraw()在第一次调用setContentView()使用 WebView 扩展布局之前进行调用。

还要确保您的 WebView 确实很大。例如,如果其布局大小设置为match_parent,那么您的 WebView 将具有屏幕的大小,这就是将捕获的内容。您需要为宽度和高度设置一些人为的高值。这个问题包含一个很好的说明:WebView.draw() not正规地工作在最新的Android系统WebView更新上

  • 正如我在问题中所指出的,我知道最新 Android 版本中的更改,并且我在基础 Activity 中的 setContentView 之前,从应用程序的 onCreate 中调用了静态“WebView.enableSlowWholeDocumentDraw()”方法在片段中膨胀我的视图之后。完全没有效果 (2认同)