Java 在活动生命周期中,UI元素何时可用?

Java 在活动生命周期中,UI元素何时可用?,java,android,user-interface,Java,Android,User Interface,我正在根据一些UI控件的膨胀维度定义一些动画。在活动生命周期中,我能进入的最早时间点是什么,以了解UI元素的大小以及我可以查询它们的尺寸?在通过setContentView()方法设置活动内容之后,是我能够从我的小部件(大小、文本和其他)获取信息的最早时间点.如果要深入到小部件刚刚放置的位置,则必须扩展要监视的每个小部件。 然后重写onDraw方法并捕获该视图是否已绘制一次 private boolean imVisible=false; public boolean imVisible() {

我正在根据一些UI控件的膨胀维度定义一些动画。在活动生命周期中,我能进入的最早时间点是什么,以了解UI元素的大小以及我可以查询它们的尺寸?

在通过
setContentView()
方法设置活动内容之后,是我能够从我的小部件(大小、文本和其他)获取信息的最早时间点.

如果要深入到小部件刚刚放置的位置,则必须扩展要监视的每个小部件。 然后重写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时触发一个已绘制的侦听器。您必须设置一个侦听器数组来监视小部件的进度。这样,最后一个小部件出现在屏幕上的确切时刻。。。你知道的。

根据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);
   }
  });

完整的(更好的)答案:

这里是你寻求的答案@迪夫把它作为一个答案,我会把它标记为接受。这就是我一直在寻找的解决方案,它成功了,成功了。我把它扩展了一点,只是为了让它成为一个“答案”。