我需要创建一个我需要设置固定大小的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仅限于父母大小,这取决于设备。
我需要一个独立的网络视图。
答案 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毫秒)的组合。或者,您可以先渲染到一个小位图,然后检查它是否完全是白色。