この質問はさまざまな形で何度か聞かれましたが、明確な答えは見つかりませんでした。
Views
コンテナの初期レイアウト(a)の後で、子孫の寸法と位置を取得できる必要がありますcontentView
。この場合に必要な寸法は、予測できないビュー(グループ)です。複数行のテキスト、装飾に対応するための最小の高さなどがある場合があります。すべてのレイアウトパス()ですべてを実行する必要はありませんonLayout
。私が必要とする測定値は、深くネストされた子からのものであるため、間にある各コンテナーのonLayout
/をオーバーライドすることは適切ではないようです。onMeasure
ループ(trigger-event-during-event)を引き起こすようなことは何もしません。
Romain Guyはかつて、.post
aRunnable
のコンストラクターView
(AFAIKはUIスレッドに含まれる)でのみ可能であるとほのめかしました。これはほとんどのデバイス(私が個人的に持っている4つのうち3つ)で機能するようですが、Nexus Sでは失敗します。NexusSは、子供ごとに1回パスするまで、すべてのサイズがなく、正しいサイズではないようです。post
edRunnable
のrun
メソッドが呼び出されたとき。レイアウトパス(in onLayout
)を数えて、と比較してみましたgetChildCount
。これも4つのうち3つで機能しますが、別の3つ(Droid Razrでは失敗します。DroidRazrは1回のパスで失敗し、すべての測定値を取得します)は、子の数に関係ありません。 )。上記のさまざまな順列を試しました(通常の投稿、への投稿、へのHandler
キャストgetContext()
Activity
そして呼び出しrunOnUiThread
ます...すべてに対して同じ結果)。
ターゲットグループの高さを親の高さと照合することで、恐ろしい恥ずべきダメハックを使用することになりました。異なる場合は、レイアウトされていることを意味します。明らかに、最善のアプローチではありませんが、さまざまなデバイスと実装の間で確実に機能するように見える唯一のアプローチです。使用できる組み込みのイベントやコールバックがないことは知っていますが、もっと良い方法はありますか?
TYIA
/ EDIT私にとっての結論は、私がテストした他のすべてのデバイスの場合と同様に、Romain Guyや他の人が示唆しているように、NexusSはレイアウトが完了.posting()
するまで待機しないということです。Runnable
良い回避策は見つかりませんでした。ありますか?