打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

在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);
}
});
}
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
自定义MarqueeView详解
安卓v7支持包下的ListView替代品
2.5.0 构建一个可复用的自定义BaseAdapter | 菜鸟教程
你想知道的关于RecyclerView的秘密都在这里
JAVA 内部类的简单总结 - JAVA学习之路 - BlogJava
套壳开发 给webAPP加上一个apk外壳
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服