2011-12-28 21 views
54

Android Documentation says có hai kích thước cho một chế độ xem, các kích thước được đo được đo và kích thước bản vẽ . Thứ nguyên được đo là thứ nguyên được tính theo số đo vượt qua (phương pháp onMeasure), trong khi kích thước bản vẽ là kích thước thực trên màn hình. Cụ thể, tài liệu nói rằng:Sự khác nhau giữa getWidth/Height() và getMeasuredWidth/Height() trong SDK Android là gì?

Các giá trị này có thể, nhưng không nhất thiết phải khác với độ rộng và chiều cao được đo.

Vì vậy, câu hỏi của tôi là: điều gì có thể làm cho kích thước bản vẽ khác với kích thước được đo? Nếu phương pháp onMeasure(int,int) tôn trọng các yêu cầu bố trí (đưa ra là các thông số widthMeasureSpecheightMeasureSpec, làm thế nào có thể SDK quyết định rằng quan điểm nên có một kích thước bản vẽ khác nhau?

Bên cạnh đó, làm thế nào/nơi trong Android Source Code đo chiều rộng/chiều cao được sử dụng để tính toán chiều rộng/chiều cao vẽ? Tôi cố gắng nhìn vào View source code, nhưng tôi không thể tìm ra cách đo lường/Chiều cao được sử dụng để tính toán chiều rộng/chiều cao cuối cùng. đệm, nhưng tôi không chắc chắn.

+0

Tôi nghĩ rằng các biện pháp này có thể khác nhau trong trường hợp nếu cuộn được thêm vào chế độ xem. – Yury

+0

Có thể, nhưng tôi đã phát triển một ViewGroup tùy chỉnh và điều này đang xảy ra trong mã của tôi. Tôi không giao dịch với việc di chuyển cho đến khi xảy ra hành vi này. Vì vậy, tôi nghĩ rằng nên có nhiều hơn cuộn liên quan đến điều này. – lgfischer

+0

Tôi xác nhận, tôi cũng phát triển một ViewGroup tùy chỉnh để ép buộc tỷ lệ khung hình: Tôi đã đo chiều rộng và chiều cao (thấp hơn hoặc bằng nhau sau đó được đề xuất), nhưng kết quả là chiều rộng và chiều cao không thay đổi (không phải số đo được). Không có quan hệ với cuộn. Tôi thực sự không thể tìm thấy một cách để buộc chiều rộng và chiều cao thực sự. – ARLabs

Trả lời

68

Như tên cho thấy đo lườngĐộ cao/chiều cao được sử dụng trong khi đo giai đoạn layoutting thứ hai.

Để tôi đưa ra một ví dụ,

Một tiện ích được yêu cầu đo chính nó, Tiện ích nói rằng nó muốn 200px x 200px. Điều này được đoĐộ cao/chiều cao.

Trong giai đoạn bố cục, tức là trong phương thức onLayout. Phương pháp này có thể sử dụng đo lường chiều cao/chiều cao của con của nó hoặc chỉ định chiều rộng/chiều cao mới bằng cách gọi phương thức bố cục của chế độ xem.

cho phép nói phương thức onLayout gọi childview.layout (0,0,150,150) giờ đây chiều rộng/chiều cao của chế độ xem khác với chiều rộng/chiều cao được đo.

Tôi khuyên bạn không nên sử dụng phương pháp đo chiều cao/chiều cao ngoài phương thức onLayout.

để tóm tắt.

  1. onMeasure -> thiết lập measuredWidth/measuredHeight
  2. onLayout -> thiết lập chiều rộng/chiều cao của các phụ tùng.

additionallly
public void View.layout(int l, int t, int r, int b)
có vẻ là nơi mà sự phân công của vị trí và kích thước sẽ xảy ra.

+0

nghĩa là chúng ta nên luôn sử dụng getWidth/getHeight để có được thứ nguyên "thực" của Chế độ xem, đúng không? – suitianshi

+0

Có, nhưng nếu bạn đang làm bố cục của riêng bạn thì bạn nên sử dụng measurWidth thay vì chiều rộng. –

+0

Vì vậy, mục đích của việc thiết lập dimesions bên trong onMeasure() là gì? Ý tôi là, layout layout là cái cuối cùng, trong đó bạn thiết lập kích thước cuối cùng của khung nhìn, possibliy bất kể kích thước đo được – edoardotognoni

Các vấn đề liên quan