2

我正在尝试将 webview 转换为 android 中的位图。但是 webview 的高度和宽度总是为零?

这是代码:

String unescaped = StringEscapeUtils.unescapeHtml4(b
                .getString("issueDescription"));
        try {
            customHtml = new String(unescaped.getBytes("ISO-8859-1"), "UTF-8");
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        customHtml = "<link rel='Stylesheet' href='index.css'/>" + customHtml;
        webView = (WebView) findViewById(R.id.issueDescription);

        webView.loadDataWithBaseURL("file:///android_asset/", customHtml, null,
                "utf-8", null);

    webView.setWebViewClient(new WebViewClient() {
                 @Override      
                public void onPageFinished(WebView view, String url) {
                    super.onPageFinished(view, url);
                    int mWidth = view.getWidth();
                    int mHeight = view.getHeight();
                    Picture bmp1 = view.capturePicture();
                    PictureDrawable pd1 = new PictureDrawable(bmp1);
                    Bitmap bitmap1 = Bitmap.createBitmap(pd1.getIntrinsicWidth(),
                            pd1.getIntrinsicHeight(), Config.ARGB_8888);
                }
            });
4

2 回答 2

1

如果您想在加载内容后获取原始高度,可以使用以下代码。尽管该代码已被弃用,但它可以完美运行。

webview.setPictureListener(new WebView.PictureListener() {
    @Override
    public void onNewPicture(WebView webView, @Nullable Picture picture) {
        int height = webview.getContentHeight();
        int height1 = webview.getMeasuredHeight();
        int height2 = webview.getHeight();
    }
});
于 2019-12-12T11:10:15.190 回答
0

根据 Stackoverflow onPageFinished(),如果您使用方法loadData()loadDataWithBaseURL.

这是您getWidth()在完全加载之前过早调用的时间问题。我的建议是在需要数据之前提前加载 webviewgetWidth()数据。例如,加载 webview 数据onCreate()并使其对不知道的用户不可见。你可以getWidth()稍后打电话

于 2019-02-24T02:07:21.653 回答