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

标签 android layout view webview

我有一个已添加到 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/

相关文章:

android - 如何以编程方式更改布局的可见性

wpf - 如何在 WPF 中重用布局

layout - Android 限定符不适用于概念墨水亚当

java - 太多对象与主键 oracle.jbo.Key 匹配

java - 在 Firebase 数据库中读取子项时遇到一些问题

android - @UnsupportedAppUsage 注解描述了什么

java - Android开机启动服务,无法接收广播

android - whatsapp喜欢个人资料图片动画

java - 如何动态移动布局?

java - Android:如何在库中正确加载 ViewStub