分享

WebView 改变内容的时候自适应高度解决办法

 Joselyn_cui 2015-07-31

在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);
}
});
}
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多