在Activity生命周期中是否可以测量UI元素?

时间:2012-03-09 19:33:27

标签: java android user-interface

我根据某些UI控件的夸大尺寸定义了一些动画。什么是活动生命周期中最早的点,我可以了解UI元素的大小,我可以查询它们的尺寸?

3 个答案:

答案 0 :(得分:2)

通过setContentView()方法设置活动的内容后,我最早能够从我的小部件(大小,文本和其他)中获取信息。

答案 1 :(得分:1)

Per Rich的要求:

您可以使用GlobalLayoutListener来确定宽度和高度的时间,如下所示:

final View myView = findViewById(R.id.id_of_view);
ViewTreeObserver vto = myView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
  @Override
  public void onGlobalLayout() {
    int viewHeight = myView.getHeight();
    int viewWidth = myView.getWidth();

    // Do what you want with the width and height

    ViewTreeObserver obs = myView.getViewTreeObserver();
    obs.removeGlobalOnLayoutListener(this);
   }
  });

完整(更好)回答:How to retrieve the dimensions of a view?

答案 2 :(得分:0)

如果您想要深入到小部件已放置的位置,您必须扩展要监视的每个小部件。 然后覆盖onDraw方法并捕获该视图是否已被绘制一次

private boolean imVisible=false;
public boolean imVisible() {
    return imVisible;
}
    @Override
    protected void onDraw(Canvas canvas) {
        if(!imVisible){
            imVisible=true;
        }   
        super.onDraw(canvas);
    }

然后你可以对感兴趣的小部件进行for循环,你知道它们是按照尺寸绘制的。

更好的解决方案是在第一次激活绘制的侦听器时调用onDraw。您必须设置一组监听器来监视窗口小部件的进度。这样,最后一个小部件在屏幕上的确切时刻......你知道。