android view getWidth() 即使在 onPreDraw() 中也返回 0
Posted
技术标签:
【中文标题】android view getWidth() 即使在 onPreDraw() 中也返回 0【英文标题】:android view getWidth() returns 0 even in onPreDraw() 【发布时间】:2019-02-03 03:56:30 【问题描述】:基于 SOF 中的答案,例如 this
与上述问题链接中的问题开启者不同,我已经尝试过足够晚的时间来衡量视图 (onPreDraw
)。
我有这个代码:
ViewTreeObserver viewTreeObserver = myAccountView.getViewTreeObserver();
viewTreeObserver.addOnPreDrawListener(
new OnPreDrawListener()
@Override
public boolean onPreDraw()
if (viewTreeObserver.isAlive())
viewTreeObserver.removeOnPreDrawListener(this);
int measuredWidth = myAccountView.getMeasuredWidth();
int width = myAccountView.getWidth();
return true;
);
尽管如此,measuredWidth
和 width
始终为 0
如何获取视图的像素宽度?
【问题讨论】:
View's getWidth() and getHeight() returns 0的可能重复 我已经尝试过足够晚(onPreDraw)来测量视图,这与上述问题链接中的问题开启者不同。 【参考方案1】:我假设您将 OnPreDrawListener 添加到 RecyclerView.Apadter 或类似的某处?
onPreDraw
如果不直接移除监听器,将会被多次调用。因此,等到您的 View 具有正宽度,然后删除 OnPreDrawListener。
@Override
public boolean onPreDraw()
if (myAccountView.getWidth() < 1)
// imageView might not be drawn yet
else
viewTreeObserver.removeOnPreDrawListener(this);
// you can do all your calculation here
return true;
【讨论】:
以上是关于android view getWidth() 即使在 onPreDraw() 中也返回 0的主要内容,如果未能解决你的问题,请参考以下文章
android中getWidth()和getMeasuredWidth()
android view getWidth() 即使在 onPreDraw() 中也返回 0