Просмотр Android getWidth() возвращает 0 даже в onPreDraw()

На основе ответов в SOF, вот так

Я попытался измерить вид достаточно поздно (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

Как я могу получить ширину вида в пикселях?

0 ответов

Я предполагаю, что вы добавляете OnPreDrawListener где-нибудь в RecyclerView.Apadter или что-то подобное?

onPreDraw будет вызываться несколько раз, если вы не удалите слушателя напрямую. Поэтому подождите, пока у вашего представления будет положительная ширина, а затем удалите OnPreDrawListener.

@Override
public boolean onPreDraw() {
      // imageView might not be drawn yet..
      if (myAccountView.getWidth() < 1) {
           return true;
      } else {
         viewTreeObserver.removeOnPreDrawListener(this);

         //..you can do all your calculation here

         //..and afterwards return
         return true
      }
}
Другие вопросы по тегам