일반적인 방법의 대안은 뷰의 도면에 연결하는 것입니다.
OnPreDrawListener
뷰를 표시 할 때 여러 번 호출되므로 뷰의 측정 된 너비 또는 높이가 특정한 반복은 없습니다. 이를 위해서는 지속적으로 확인 ( view.getMeasuredWidth() <= 0
)하거나 measuredWidth
0보다 큰 횟수로 제한을 설정해야합니다 .
또한 뷰가 그려지지 않을 가능성이 있으며, 이는 코드의 다른 문제를 나타낼 수 있습니다.
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
}
});