2012-10-24 38 views
5

Tôi cần truy xuất chiều cao ScrollView được xác định trong tệp xml bố cục trong khi khởi động hoạt động. Cách tốt nhất để thực hiện điều này là gì. Tôi đã thử đặt mã bên trong onCreate(), onStart()onResume(). Tất cả đều cho chiều cao bằng 0 khi khởi động. Có phương pháp nào giống như onFinishInflate() cho các hành vi không?Kích thước bố cục đọc khi khởi động ứng dụng

Đây là mã của tôi:

myScroll=(ScrollView) findViewById(R.id.ScrollView01); 
int height=myScroll.getHeight(); 

Trả lời

6

Bạn có thể làm một cái gì đó như thế này:

Nhận một tài liệu tham khảo cuối cùng để scrollview của bạn (để truy cập trong onGlobalLayout() phương pháp). Tiếp theo, lấy ViewTreeObserver từ ScrollView, và thêm một OnGlobalLayoutListener, ghi đè lên onGLobalLayout và nhận các phép đo trong người nghe này.

final ScrollView myScroll = (ScrollView)findViewById(R.id.my_scroll); 
ViewTreeObserver vto = myScroll.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 

    @Override 
    public void onGlobalLayout() { 
     LayerDrawable ld = (LayerDrawable)myScroll.getBackground(); 
     height = myScroll.getHeight(); 
     width=myScroll.getHeight(); 
     ViewTreeObserver obs = myScroll.getViewTreeObserver(); 
     obs.removeOnGlobalLayoutListener(this); 
    } 

}); 

xem chi tiết trong luồng này:

How to retrieve the dimensions of a view?

+0

Cảm ơn @Anup. Nó hoạt động. Tuy nhiên, 'removeGlobalOnLayoutListener()' không được chấp nhận. bất kỳ lựa chọn thay thế ?? – JiTHiN

+0

xin lỗi tôi đã sử dụng phương pháp cũ. Đã cập nhật mã. –

+0

cảm ơn một lần nữa ... – JiTHiN

1

Bạn cần phải truy vấn xem vọt sau bố trí được thực hiện. Địa điểm được đề xuất là onWindowFocusChanged(boolean). Xem câu hỏi này để biết thêm thông tin: How to get the absolute coordinates of a view

Ngoài ra, nếu bạn muốn mở rộng lớp Bố cục, ví dụ: làm cho một lớp con của LinearLayout vv, bạn có thể ghi đè lên nó onLayout() theo cách này:

@Override 
public void onLayout(boolean changed, int l, int t, int r, int b) { 
    super.onLayout(changed, l, t, r, b); 

    myScroll=(ScrollView) findViewById(R.id.ScrollView01); 
    int height=myScroll.getHeight(); 
} 
Các vấn đề liên quan