почему super.onMeasure или textView, setText () не срабатывают снова? - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть некоторый код Android для пользовательского FrameLayout.Код изменяет некоторый текст textView.

Я вижу, что изменение вступает в силу только тогда, когда я вызываю super.onMeasure(...,...)

Я ожидаю, что он автоматически вызовет onMeasure(), когда текст изменяется с помощью кода или когдаЯ звоню view.invalidate()

почему последний не влияет на пользовательский интерфейс?

 @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    if (myAccountView.getVisibility() == GONE) {
      return;
    }
 //some more code
    for (int i = 0; i < chipTexts.size(); i++) {
      String text = chipTexts.get(i);
      myAccountView.setText(text);
      if (myAccountView.getPaint().measureText(text) <= textMaxWidth) {
        break;
      }
    }
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
  }

вызывает super.onMeasure() в конце более эффективно, чем view.requestLayout()?

1 Ответ

0 голосов
/ 30 сентября 2018

Попробуйте позвонить requestLayout () для вашего просмотра. invalidate () означает, что для вашего просмотра будет вызван onDraw.Но если ваше представление меняет свои границы, вы должны вызвать requestLayout.

...