应用程序启动时读取布局大小

我需要在活动启动期间检索布局xml文件中定义的ScrollView的高度。 哪个是实现此目的的最佳实践。 我已经尝试将代码放在onCreate()onStart()onResume() 。 All在启动时将高度设为0。 对于actvities有没有像onFinishInflate()这样的方法?

这是我的代码:

 myScroll=(ScrollView) findViewById(R.id.ScrollView01); int height=myScroll.getHeight(); 

你可以这样做:

获取ScrollView的最终引用(以访问onGlobalLayout()方法)。 接下来,从ScrollView获取ViewTreeObserver,并添加一个OnGlobalLayoutListener,覆盖onGLobalLayout并在此侦听器中获取测量值。

 final ScrollView myScroll = (ScrollView)findViewById(R.id.my_scroll); ViewTreeObserver vto = myScroll.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { LayerDrawable ld = (LayerDrawable)myScroll.getBackground(); height = myScroll.getHeight(); width=myScroll.getHeight(); ViewTreeObserver obs = myScroll.getViewTreeObserver(); obs.removeOnGlobalLayoutListener(this); } }); 

在这个post中看到更多:

如何检索视图的尺寸?

您需要执行布局查询视图边界。 建议的地方是onWindowFocusChanged(boolean) 。 有关更多信息,请参阅此问题: 如何获取视图的绝对坐标

另外,如果您敢于扩展Layout类,例如创建LinearLayout等的子类,则可以这种方式覆盖它的onLayout():

 @Override public void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); myScroll=(ScrollView) findViewById(R.id.ScrollView01); int height=myScroll.getHeight(); }