2010-09-07 32 views
10

Tôi đã nhận thấy rằng Android, WPF và Silverlight đều tuân theo mẫu bố cục hai chiều. Có một phương thức Measure() đệ quy được gọi để kích thước phần tử, có thể nhiều lần. Sau đó, một phương thức Layout/Arrange() đệ quy được gọi là đưa ra các vị trí chính xác của trẻ em trong kiểm soát cha mẹ của chúng, và cũng sẽ thiết lập kích thước cuối cùng của điều khiển.Bố cục giao diện người dùng hai lần: Tại sao?

Câu hỏi của tôi: tại sao điều này được chia thành hai lần, đặc biệt khi, đối với một số loại điều khiển, Measure() không thể tính kích thước thực tế của điều khiển mà không thực sự đặt vị trí của trẻ? Có một số loại trường hợp thiểu số bố trí được thực hiện bởi điều này?

Tôi đang cố tạo bộ công cụ giao diện người dùng của riêng mình và tôi hiện đang nghiêng về phía mẫu Bố cục một lần(), nhưng tôi muốn được thuyết phục rằng điều này có phải là khôn ngoan hay không.

Thanks for reading này :)

Sean

Trả lời

12

Lý do cho hai đèo là bất kỳ yếu tố trong cấu trúc có thể ảnh hưởng đến không gian có sẵn còn lại của người khác.

Một số yếu tố muốn chiếm không gian lớn nhất có thể trong khi các yếu tố khác có kích thước cố định. Bạn cũng có thể có các phần tử chỉ với một tập hợp chiều rộng tối đa. Nó tạo ra một phương trình mà không thể được giải quyết trong một lần.

Các bảng khác nhau trong cấu trúc phân cấp yêu cầu các phần tử cần kích thước trong lần đầu tiên, sau đó phân phối khoảng trống giữa chúng theo bản chất của mỗi bảng và cuối cùng là thông báo cho từng phần tử của không gian được phân bổ.

CHỈNH SỬA: Một số giải thích khác

Hạn chế chính của bố cục một lần là bạn đang xử lý từng phần tử theo trình tự. Yếu tố đầu tiên chiếm một lượng không gian nhất định và các phần tử khác chiếm phần còn lại. Tại sao yếu tố này là yếu tố đầu tiên? Hãy thử thuật toán của bạn với thứ tự phần tử khác nhau và bạn sẽ có bố cục kết quả khác nhau.

Bố cục hai đoạn mô phỏng hành vi song song trong đó mỗi phần tử ảnh hưởng đến toàn bộ bố cục.

+0

Đó là bit cuối cùng, "cuối cùng là thông báo cho từng phần tử của không gian được phân bổ", đó là phần quan trọng. Trình quản lý tiện ích không cho phép các điều khiển tự kích thước, nó chỉ cho phép chúng tạo ra các gợi ý. – moswald

+0

Hmm .. Tôi nhận được cách trẻ có thể tham lam về kích thước chúng được phân bổ, và sau đó nó phụ thuộc vào cha mẹ để lấy ra đúng số lượng không gian. Tuy nhiên, bạn có thể đạt được điều này trong một thuật toán một lần bằng cách thực hiện một phép đo() của mỗi đứa trẻ, và sau đó bố cục cuối cùng() cho mỗi đứa trẻ, tất cả trong cuộc gọi layout() của cha mẹ. Điều này vẫn sẽ là một đệ quy duy nhất của cây, nhưng với hai lần cho mỗi bộ trẻ em. Tôi có nghĩ rằng điều này đạt được kết thúc giống như cách tiếp cận hai vượt qua, nhưng nó chỉ kém hiệu quả hơn? – Sean

+0

Từ góc nhìn của ông bà, cha mẹ chỉ là một đứa trẻ khác mà nó muốn đo() và bố trí(). ;) – Bubblewrap

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