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()ません。すべてのビューを完全に削除してから新しいレイアウトを拡張するか、 a を使用しViewFlipperて異なるビューを切り替えるか、アプリを作り直して使用する必要があります。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 に答える