dar*_*ord 6 android android-webview
我正在实现一个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() + "");
Run Code Online (Sandbox Code Playgroud)
其中htmlString是HTML格式的String.
但是两个Logs都返回0.
我不确定我做的是否正确.如何知道内容高度,然后相应地设置WebView的高度?
这是因为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());
}
};
Run Code Online (Sandbox Code Playgroud)
如果你的webview不是wrap_contents,那么一个选项是做josedlujan在他对这个问题的回答中提出的建议并从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);
}
});
Run Code Online (Sandbox Code Playgroud)
您可以使用 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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8130 次 |
| 最近记录: |