视图的状态活动度量值



我创建了一个自定义ViewGroup ReadPage,在活动中我使用它

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);
    pager=(ReadPage)findViewById(R.id.readpage);
    pager.addArticle("...");
}

而addArticle需要视图的宽度和高度

public void addArticle(String s){
        articles.add(new Article(s,getMeasuredWidth(),getMeasuredHeight()));
}

但此时测量宽度和测量高度为0。所以我想知道在什么状态下会测量视图,这样我就可以得到它在屏幕上显示的正确值。

这个答案可能会满足您的需求:https://stackoverflow.com/a/1016941/213528

你可能会这样使用它:

private int WIDTH;
private int HEIGHT;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);
    Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    WIDTH = size.x;
    HEIGHT = size.y;
    pager = (ReadPage)findViewById(R.id.readpage);
    pager.addArticle("...");
}
// ...
public void addArticle(String s){
    articles.add(new Article(s, WIDTH, HEIGHT));
}

使用ViewTreeObserver

 viewToMeasure.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
              viewToMeasure.getViewTreeObserver().removeGlobalOnLayoutListener(this);
             /* you can get the view's height and width here 
                using  viewToMeasure.getWidth() and viewToMeasure.getHeight() 
             */                         
         }
  });      

视图有时会在稍后的"测量过程"中进行测量。当视图结构发生更改(由于添加、删除、更新视图)时,将运行一个测量,然后运行一个布局过程,重新计算视图的大小和位置。

例如,您可以随时将文本数据设置为TextView,但当视图准备好显示时,它自己决定如何显示它。然后计算文本扭曲等,而不是在设置文本时计算。

您应该将显示Article的视图设计为类似的视图。您可以提供数据,但在调用其onSizeChanged()时,让View处理并进一步显示数据。视图还可以使用addOnLayoutChangeListener()来知道何时完成布局。

最新更新