为什么不通过super.onMeasure或textView,setText()触发测量再次通过?

时间:2018-09-30 20:28:33

标签: android user-interface invalidation measure onmeasure

我有一些自定义FrameLayout的android代码。该代码更改了一些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 :(得分:0)

尝试致电requestLayout()进行查看。 invalidate()表示将为您的视图调用onDraw。但是,如果您的视图改变了边界,则必须调用requestLayout。