我有一个我已添加到视图组的WebView:
webView = new WebView(context);
addView(webView, ViewGroup.LayoutParams.WRAP_CONTENT);
它存在于我的viewgroup的构造函数中。
然后在布局上,我想这样做:
webView.measure(View.MeasureSpec.makeMeasureSpec(getWidth(),View.MeasureSpec.EXACTLY),
View.MeasureSpec.makeMeasureSpec(3000, View.MeasureSpec.AT_MOST));
不幸的是,除非我指定EXACTLY
,否则webView.getMeasuredHeight()始终返回0
。我想要做的是确定webview想要的大小,以便我可以在其周围放置其他元素。我指定我希望webview足够大以包含它的内容,并且我提供了大量的空间。那为什么它仍然是0?
由于
当webView获得measure()请求时,它应该知道它有多少数据,没有?
webView = new WebView(context);
webView.loadData("<html></html>","text/html", "utf-8");
addView(webView, new ViewGroup.LayoutParams(getWidth(), 1000));
答案 0 :(得分:4)
此:
addView(webView, ViewGroup.LayoutParams.WRAP_CONTENT);
非常错误。第二个参数作为int传递时,是父内部视图的索引。这不符合你的想法。您应该传递LayoutParams
的新实例。
您的问题可能是您在WebView
有时间加载HTML文档之前进行了测量。您使用约束AT_MOST
3000进行测量,0肯定尊重该约束。 WebView只是告诉你它的内容现在的高度为0。
答案 1 :(得分:1)
我的猜测是你在onCreate()
测量视图。视图尚未绘制。您必须等到视图绘制后的时间才能进行测量。