通常の方法に代わる方法は、ビューの描画にフックすることです。
OnPreDrawListener
ビューを表示するときに何度も呼び出されるため、ビューに有効な測定された幅または高さがある特定の反復はありません。これには、継続的に確認(view.getMeasuredWidth() <= 0
)するかmeasuredWidth
、ゼロより大きいかどうかを確認する回数に制限を設定する必要があります。
また、ビューが描画されない可能性もあり、コードに関する他の問題を示している可能性があります。
final View view = [ACQUIRE REFERENCE]; // Must be declared final for inner class
ViewTreeObserver viewTreeObserver = view.getViewTreeObserver();
viewTreeObserver.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
if (view.getMeasuredWidth() > 0) {
view.getViewTreeObserver().removeOnPreDrawListener(this);
int width = view.getMeasuredWidth();
int height = view.getMeasuredHeight();
//Do something with width and height here!
}
return true; // Continue with the draw pass, as not to stop it
}
});