具有固定大小的隐形webview(大于父级)

时间:2014-02-17 13:21:29

标签: android webview

我需要创建一个我需要设置固定大小的webview。

假设webview的像素宽度应为570, 但该设备的宽度仅为320像素。

如何呈现与父母大小无关的网页浏览尺寸?

final WebView webView = new WebView(context);
webView.loadDataWithBaseURL("", html, "text/html", "utf-8", null);

webView.setDrawingCacheEnabled(true);
webView.setVisibility(View.INVISIBLE);
rootView.addView(webView);

webView.setWebViewClient(new CustomtWebClient(context));

在CustomtWebClient

@Override
public void onPageFinished(WebView view, String url) {
    super.onPageFinished(view, url);
    final WebView webView = view;
    view.postDelayed(new Runnable() {
        @Override
        public void run() {
            Bitmap bitmap = Bitmap.createBitmap(webView.getWidth(),
                    webView.getContentHeight() * (int) webView.getScale(), Bitmap.Config.ARGB_8888);
            final Canvas c = new Canvas(bitmap);
            webView.draw(c);

            //additional stuff...

        }
    }, 100);
}

正如您所看到的,只应渲染webview,然后将其转换为位图。

但是我现在这样做的方式是webview仅限于父母大小,这取决于设备。

我需要一个独立的网络视图。

1 个答案:

答案 0 :(得分:1)

你应该可以在没有将其附加到视图层次结构(没有调用WebView)的情况下使用“屏幕外”rootView.addView

final WebView webView = new WebView(context);
webView.loadDataWithBaseURL("", html, "text/html", "utf-8", null);

webView.layout(0, 0, desiredWidth, desiredHeight);
webView.setWebViewClient(new CustomtWebClient(context));

不幸的是,您使用onPageFinished的方法无法可靠地运行 - 现在为时过早,您有时(或在某些设备上)会获得白页。目前,WebView没有很好的回调来知道什么时候它有“绘制好的东西”。

您可以做的最好的事情可能是弃用的setPictureListener和任意超时(比如说100毫秒)的组合。或者,您可以先渲染到一个小位图,然后检查它是否完全是白色。