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

时间:2012-10-24 10:35:42

标签: android android-layout android-scrollview

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

这是我的代码:

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

2 个答案:

答案 0 :(得分:6)

您可以这样做:

获取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);
    }

});

在此主题中查看更多内容:

How to retrieve the dimensions of a view?

答案 1 :(得分:1)

在执行布局后,您需要查询视图边界。建议的地点是onWindowFocusChanged(boolean)。有关详细信息,请参阅此问题:How to get the absolute coordinates of a view

另外,如果您敢于扩展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();
}