Java 在活动生命周期中,UI元素何时可用?
我正在根据一些UI控件的膨胀维度定义一些动画。在活动生命周期中,我能进入的最早时间点是什么,以了解UI元素的大小以及我可以查询它们的尺寸?在通过Java 在活动生命周期中,UI元素何时可用?,java,android,user-interface,Java,Android,User Interface,我正在根据一些UI控件的膨胀维度定义一些动画。在活动生命周期中,我能进入的最早时间点是什么,以了解UI元素的大小以及我可以查询它们的尺寸?在通过setContentView()方法设置活动内容之后,是我能够从我的小部件(大小、文本和其他)获取信息的最早时间点.如果要深入到小部件刚刚放置的位置,则必须扩展要监视的每个小部件。 然后重写onDraw方法并捕获该视图是否已绘制一次 private boolean imVisible=false; public boolean imVisible() {
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);
}
});
完整的(更好的)答案:这里是你寻求的答案@迪夫把它作为一个答案,我会把它标记为接受。这就是我一直在寻找的解决方案,它成功了,成功了。我把它扩展了一点,只是为了让它成为一个“答案”。