อีกทางเลือกหนึ่งสำหรับวิธีการทั่วไปคือเชื่อมต่อกับภาพวาดของมุมมอง
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
}
});