私は、水平方向にスクロールするウィンドウで、テキストとイメージを列に表示するビューを持っています。それはリフローするので、内容が変化すると(少なくとも潜在的に)サイズが変更されます。また、ソフトキーボードが来て動いて視野の高さが変わると、リフローしてサイズを変更します(ほぼ一定の領域を維持します)。私が見つけた何requestLayout()はonSizeChanged()から呼び出されても効果がありません。
は私のonSizeChanged()ハンドラから呼び出されたときにほとんどの時間(それは私のonMeasure()過負荷への呼び出しをトリガしないという意味で)requestLayout()作品を呼び出し...しかしないということでした。
私はrequestLayout()
と呼ば
Runnableと
onMeasure()
後に実行する必要があります私のコードを呼び出した後、
post()
編別
Runnable
INGの
post()によってこの問題を回避することができました...しかし、これは少し壊れやすいようです(私はしないでください遅れを追加したいのですが、私は2番目の
Runnable
が非同期の後に実行されることを確認したいと思います
onMeasure()
)、イベントループを非常に多く通過するため、画面があまりにも多く点滅するためです。
onSizeChanged()
で - -
onMeasure()
(と、おそらく、他の
onSizeChanged()
)は次の
onDraw()の前に起こることを強制する
いくつか方法はありますか?
このコールバックはレイアウトプロセスの一部であるため、 'requestLayout()'を2回目に呼び出すのではなく( 'onSizeChanged()'では動作しません)なぜ正しいサイズを'onMeasure()'? –
私はそれを行います。しかし、高さが変わると、私はリフローします。これは幅を変更するため、 'onMeasure()'を呼び出す必要があります。 –
あなたの質問は、実際に私が今まで持っていた問題の答えをくれました:)あなたのView.postソリューションは、私にとって副作用なしで動作します。ありがとう! –