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;
      
    );

尽管如此,measuredWidthwidth 始终为 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

android 面试题

getWidth 和 getHeight 返回零

为啥在 onResume() 中对 View 调用 getWidth() 返回 0?

View的getMeasuredWidth和getWidth有什么区别?