Android:View.measure(int,int)总是想成为(0,0)

时间:2010-10-14 20:24:50

标签: android layout views webview

我有一个我已添加到视图组的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?

由于

更新1

当webView获得measure()请求时,它应该知道它有多少数据,没有?

webView = new WebView(context);
webView.loadData("<html></html>","text/html", "utf-8");
addView(webView, new ViewGroup.LayoutParams(getWidth(), 1000));

2 个答案:

答案 0 :(得分:4)

此:

addView(webView, ViewGroup.LayoutParams.WRAP_CONTENT);

非常错误。第二个参数作为int传递时,是父内部视图的索引。这不符合你的想法。您应该传递LayoutParams的新实例。

您的问题可能是您在WebView有时间加载HTML文档之前进行了测量。您使用约束AT_MOST 3000进行测量,0肯定尊重该约束。 WebView只是告诉你它的内容现在的高度为0。

答案 1 :(得分:1)

我的猜测是你在onCreate()测量视图。视图尚未绘制。您必须等到视图绘制后的时间才能进行测量。