2

私はダイアログ形式としてアクティビティを作成しています。画面全体をカバーするのではなく、その一部だけをカバーします。setContentView()を呼び出した後にウィンドウのレイアウトを設定する

window.setLayout(windowWidthInDp, LayoutParams.WRAP_CONTENT); 

をそして、それは動作しません。私がやったことはsetContentView()を呼び出した後、この活動ののonCreate()メソッドにあった、私は呼んでいます。私はそれを動作させるために代わりに次のことをする必要があります:これは、setContentView()が呼び出されたあとも同じです。 なぜそれを直接呼び出すのではなく、メッセージキューに入れなければならないのですか? ありがとう!

答えて

1

コンテンツビューを設定するだけで、Androidフレームワークにレイアウトが与えられます。レイアウトはまだ完全に構成されていません。これは、Androidフレームワークが制御を取り戻すまで(つまり、次のイベントループで)発生しません。これは、onCreate()メソッドが終了するまで発生しません。

Handlerにコードを投稿すると、Androidフレームワークがレイアウトを完全に構成し終わるまで、そのコードの実行が遅れることになります。

+0

返信いただきありがとうございます。 onCreate()メソッドが返される以外は、レイアウトが完全に構成されているという別の信号がありますか? – seemuch

+1

一部の人々は 'ViewTreeObserverのaddOnGlobalLayoutListener()'を使用しています。 –

+1

詳細については、http://stackoverflow.com/questions/4393612/when-can-i-first-measure-a-viewを参照してください。ここで誰かが 'ViewTreeObserver.addOnPreDrawListener()'を使って提案します。 –

関連する問題