0

我在调用后获取有关视图的信息时遇到问题setContentView()。单击按钮后,我正在更改活动的布局。这是我的代码示例。

public void onClickButton1(View v) {
    setContentView(R.layout.activity_main);
    setScreen(); 
}

但是在执行setScreen()方法期间,布局仍然没有渲染,所以我不能调用getWidth()布局中的一些视图(分别可以,但我总是得到 0)。我怎么能等到setContentView()完成?请注意,使用这个:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    setScreen();
}       

对我来说还不够。我需要根据活动周期独立更改布局。

4

2 回答 2

0

没有简单的方法可以setContentView()用来获得您想要的结果。您要么需要完全删除所有视图,然后扩展新布局,使用 aViewFlipper在不同视图之间切换,或者,恕我直言,这是最好的方法,重新设计您的应用程序以使用Fragments

于 2013-04-10T18:14:11.007 回答
0

您需要将 ViewTreeObserver 附加到您的布局:

    setContentView(R.layout.yourLayoutName);
    View yourLayout = findViewById(R.id.ID_OF_YOUR_LAYOUT);
    ViewTreeObserver vto = yourLayout.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {

            //Do your work
            vto.removeOnGlobalLayoutListener(this);
        }
    });
于 2013-04-10T18:14:27.927 回答