在js中获取内容的高度, 然后调用android里面的方法,设置webview的高度。
注意:黄色区域要修改成自己的元素
要运行在UI线程
要设置LayoutParams
webView.getLayoutParams().height =height;是没有用的
为了效率,可以把已经获取到的高度保存下来,备用,获取到高度的内容就不用重复获取
private void setupWebView(final WebView webView) {
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
System.out.println("finish");
webView.loadUrl("javascript:ViewHolder.resize(document.getElementById('test').scrollHeight)");
super.onPageFinished(view, url);
}
});
webView.addJavascriptInterface(this, "ViewHolder");
}
@android.webkit.JavascriptInterface
public void resize(final float height) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
webView.setLayoutParams(new LinearLayout.LayoutParams(
getResources().getDisplayMetrics().widthPixels,
(int) ((height + 10) * getResources()
.getDisplayMetrics().density)));
System.out.println("height " + height);
}
});
}
ListView 中复用webview 具体viewholder举例子
class ViewHolder {
WebView webView;
int position;
public ViewHolder(View convertView) {
this.webView = (WebView) convertView.findViewById(R.id.webview);
setupWebView(this.webView);
}
private void loadingWeb(String content,int position) {
this.position = position;
webView.loadDataWithBaseURL(null, content, "text/html",
"utf-8", null);
if (heightMap.get(position) != null) {
System.out.println("resize $$$$$$$$$$$");
resize(heightMap.get(position));
}
}
private void setupWebView(final WebView webView) {
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setBlockNetworkImage(false);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
System.out.println("finish " + heightMap.get(position));
if (heightMap.get(position) == null) {
webView.loadUrl("javascript:ViewHolder.resize(document.getElementById('test').scrollHeight)");
}
super.onPageFinished(view, url);
}
});
webView.addJavascriptInterface(this, "ViewHolder");
}
@android.webkit.JavascriptInterface
public void resize(final float height) {
heightMap.put(position, height);
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
webView.setLayoutParams(new LinearLayout.LayoutParams(
getResources().getDisplayMetrics().widthPixels,
(int) ((height + 10) * getResources()
.getDisplayMetrics().density)));
System.out.println("height " + height);
}
});
}
}