在活动生命周期中,是否有可用于测量的UI元素?

在活动生命周期中,是否有可用于测量的UI元素?

问题描述:

我正在定义一些基于某些UI控件的膨胀尺寸的动画。活动生命周期中的最早点是什么,我可以利用它来了解UI元素的大小,并且可以查询它们的尺寸?在活动生命周期中,是否有可用于测量的UI元素?

+1

就出在这里,你寻找答案。 http://stackoverflow.com/questions/4142090/how-do-you-to-retrieve-dimensions-of-a-view-getheight-and-getwidth-always-r – DeeV 2012-03-09 19:51:15

+0

@Deev把这作为答案,我'将其标记为已接受。这是我寻找的解决方案,它的工作 – Rich 2012-03-10 01:34:09

+0

好的,完成了。我扩展了一下,所以这是一个“答案”。 – DeeV 2012-03-12 14:25:30

每里奇的要求:

您可以决定当宽度和高度使用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?

通过setContentView()方法设置好您的活动内容后,您就可以从我的窗口小部件(尺寸,文本和其他)中获取信息。

如果你想深入了解widget已经被放置的位置,你必须扩展你想要监视的每个widget。 然后重写的onDraw方法和捕获如果这一观点已经绘一次

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

然后你就可以循环到感兴趣的部件做了,你知道他们是在他们与dimentions位置绘制。

更好的解决方案是onDraw在第一次触发一个绘制的侦听器时被调用。您必须设置一组监听小部件进度的监听器。这就是最后一个小部件在屏幕上的确切时刻......你知道它。