私の最初の問題は、View
プログラムでレイアウトを変更できるように、ルートの高さと幅を知る必要があることでした。私の目的では、この情報をonCreate()
;中に決定する必要は必ずしもありません。ルートのレイアウトが完了した後、プログラムで子を追加するだけで十分です。そのため、いつルートを呼び出して有効な結果を返すかを決定するためのフックとしてView
喜んで使用します。onWindowFocusChanged()
View
getWidth()
getHeight()
View
しかし、かなりの数の人が中にルートのサイズを決定する方法を尋ねてきましonCreate()
た。ユーザーエクスペリエンスを向上させるために、おそらくこれを行いたいと考えていると思います-おそらく、ユーザーがレイアウトが段階的に構築されているのを見ないようにするためです(誰かが理由を明確にできる場合は、それをいただければ幸いです)。さて、私がこれに与えられた一般的な答えは、ここの のように、 a を内Runnable
のルートにポストすることです。その中でなどを実行します。これが機能する理由は、にレイアウトがあるか、ウィンドウにアタッチされているときに、に投稿されたオブジェクトが実行されるようだからです。View
onCreate()
Runnable
getWidth()
Runnable
View
View
これは私の質問につながります。の API ドキュメントではView
、この動作について説明していないようです。それで、誰かがそれが定義され、文書化されている場所を教えてもらえますか? それとも、ソースの検査の問題ですか?Runnables
のキューに残りView
、レイアウト プロセス後の特定の時点でのみ処理される、絶対的かつ厳密に定義された機能ですか?
さらなる明確化:ケリーの答えを読んで、もう少し考えてみると、私の基本的な質問は次のように明確にできます。にを投稿することで、期間中に利用できます。Kerry が指摘しているように、このメッセージは が実行されるまで実行できないことが保証されています。レイアウトが の後に発生することは理解していますが、の寸法がわかっているときになぜこれを実行する必要があるのか 、現時点ではまだ理解できません。View's
onCreate()
Runnable
View
Runnable
onCreate()
onCreate
Runnable
View