我正在实现一个WebView,这样它就可以根据内容高度调整其高度。我试着做了以下事情:
WebView view = new WebView(context);
view.loadData(htmlString, "text/html", "utf-8");
view.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Log.d("2", view.getContentheight() + "");
// Set the height of the webview to view.getContentHeight() here?
}
});
Log.d("1", view.getContentHeight() + "");
其中htmlString是一个超文本标记语言格式的字符串。
但是,这两个日志都返回0。
我不确定我是否在做正确的事情。我如何知道内容的高度,然后相应地设置WebView的高度?
发布于 2014-04-16 16:46:47
这是因为onPageFinished
回调意味着WebView已经完成了从网络读取字节,仅此而已。在触发onPageFinished
的时候,页面甚至可能还没有被解析。
如果你的webview的高度设置为wrap_contents,那么你可以这样做:
WebView v = new WebView() {
@Override
public void onSizeChanged(int w, int h, int ow, int oh) {
super.onSizeChanged(w, h, ow, oh); // don't forget this or things will break!
Log.d(TAG, "WebView height" + getContentHeight());
}
};
如果你的webview不是wrap_contents,那么一种选择是按照josedlujan在his answer中对这个问题的建议,从JavaScript获取高度。
另一种选择是使用不推荐使用的PictureListener
webview.setPictureListener(new PictureListener() {
int previousHeight;
@Override
public void onNewPicture(WebView w, Picture p) {
int height = w.getContentHeight();
if (previousHeight == height) return;
previousHeight = height;
Log.d(TAG, "WebView height" + height);
}
});
发布于 2017-06-30 13:05:31
下面是在视图加载完成时获取webview滚动高度的工作代码:
WebView webviewPageTest=new WebView(this);
webviewPageTest.getSettings().setJavaScriptEnabled(true);
class JsObject {
@JavascriptInterface
public void toString(String jsResult) {
Log.v("scrolH:",jsResult);
//use this if you need actual onscreen measurements
//float webViewHeight = (Integer.parseInt(jsResult) * getResources().getDisplayMetrics().density);
}
}
webviewPageTest.addJavascriptInterface(new JsObject(), "HTMLOUT");
webviewPageTest.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
view.loadUrl("javascript:( function () { var h = document.body.scrollHeight; window.HTMLOUT.toString(h); } ) ()");
}
});
this.addContentView(webviewPageTest, params);
在这里Łukasz Sromek和josedlujan上面和这里android dev docs
发布于 2014-04-16 06:37:15
您可以使用javascript从webview获取高度和宽度。
WebView view = new WebView(context);
view.loadData(htmlString, "text/html", "utf-8");
view.getSettings().setJavaScriptEnabled(true);
view.setSaveEnabled(true);
view.addJavascriptInterface(new JavaScriptInterface(), "HTMLOUT");
view.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url){
view.loadUrl("javascript:window.HTMLOUT.getContentHeight
(document.getElementByTagName('html')")
}
});
view.loadDataWithBaseURL(null,htmlString,"text/html","utf-8,null");
}
class JavascriptInterface{
public void getContentHeight(String value){
if (value != null){
webviewContentHeight = Integer.parseInt(value);
Log.d(LOG_TAG("result from js"+webviewContentHeight);
Toast.makeText(activity,"Content Height is:"+webviewContentHeight,
Toast.LENGTH_SHORT).show();
}
}
}
https://stackoverflow.com/questions/23093513
复制相似问题