Android:在Nougat中获取整个WebView的截图(Android 7)

时间:2017-07-21 06:06:39

标签: android webview screenshot android-7.0-nougat

我使用下面的代码从 UPDATE tblMsgs SET tblMsgs.MsgType = IIf(Mid("MsgString",6,2)="22","RESPONSE","REQUEST") WHERE (((Mid([MsgString],6,2))="22" Or (Mid([MsgString],6,2))="14")); if 19 = REQUEST if 59 = RESPONSE if 22 = REQUEST if 62 = RESPONSE if 14 = REQUEST if 54 = RESPONSE if 2F = REQUEST if 6F = RESPONSE if 7E = REQUEST 获取屏幕截图。它在Android 6及更低版本中运行良好,但在Android 7中它只占用webview的可见部分。

WebView

但位图b不完整。如何在Android Nougat中截取整个// before setContentView if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { WebView.enableSlowWholeDocumentDraw(); } ... // before set webview url webView.setDrawingCacheEnabled(true); // after html load complete final Bitmap b = Bitmap.createBitmap(webView.getMeasuredWidth(), webView.getContentHeight(), Bitmap.Config.ARGB_8888); Canvas bitmapHolder = new Canvas(b); webView.draw(bitmapHolder); 的屏幕截图?

编辑:
我发现WebView效果不佳。我对整个webView.getContentHeight高度进行了硬编码,效果很好。所以问题是:如何在Android Nougat中获得整个webview内容高度?

2 个答案:

答案 0 :(得分:4)

使用以下方法代替getMeasuredWidth()& getContentHeight()方法:

computeHorizontalScrollRange(); -> for width 
computeVerticalScrollRange(); -> for height

这两种方法将返回整个可滚动的宽度/高度,而不是屏幕上webview的实际widht / height

要实现这一目标,您需要制作WebViews getMeasuredWidth()& getContentHeight()方法公开如下

public class MyWebView extends WebView
{
    public MyWebView(Context context)
    {
        super(context);
    }

    public MyWebView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    public MyWebView(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
    }

    @Override
    public int computeVerticalScrollRange()
    {
        return super.computeVerticalScrollRange();
    }

}

在其他工作中你也可以使用视图树观察者来计算webview高度,如answer

所示

答案 1 :(得分:0)

删除以下代码块

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        WebView.enableSlowWholeDocumentDraw();
    }

禁用整个HTML文档会产生很大的性能损失。

根据文档,

  

对于针对L版本的应用,WebView有一个新的默认行为,可以通过智能选择需要绘制的HTML文档部分来减少内存占用并提高性能。

可能值得研究this

回答编辑1: 在渲染后检索webview高度 https://stackoverflow.com/a/22878558/2700586