【问题标题】:android view getWidth() returns 0 even in onPreDraw()android view getWidth() 即使在 onPreDraw() 中也返回 0
【发布时间】: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

如何获取视图的像素宽度?

【问题讨论】:

标签: android text size width android-viewtreeobserver


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多