我有一个已添加到 View 组的 WebView:
webView = new WebView(context);
addView(webView, ViewGroup.LayoutParams.WRAP_CONTENT);
这存在于我的 View 组的构造函数中。
然后在布局上,我想这样做:
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));
最佳答案
这个:
addView(webView, ViewGroup.LayoutParams.WRAP_CONTENT);
是非常错误的。第二个参数,当作为 int 传递时,是父 View 中的索引。这并不像您认为的那样。您应该改为传递 LayoutParams
的新实例。
您的问题可能是您在 WebView
有时间加载 HTML 文档之前进行了测量。您使用约束 AT_MOST
3000 进行测量,而 0 绝对遵守该约束。 WebView 只是告诉您它的内容目前的高度为 0。
关于Android:View.measure(int,int) 总是想要 (0,0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3937238/