2010-11-01 44 views
95

Tôi đã luôn luôn sử dụng RelativeLayout mỗi khi tôi cần một hộp chứa View, vì nó linh hoạt, ngay cả khi tôi chỉ muốn hiển thị một cái gì đó thực sự đơn giản.RelativeLayout có đắt hơn LinearLayout không?

Có ổn không, hoặc tôi có nên thử sử dụng LinearLayout khi có thể, từ quan điểm hiệu suất/thực hành tốt không?

Cảm ơn!

Trả lời

124

Trong cuộc trò chuyện tại Google I/O 2013 (Viết chế độ xem tùy chỉnh cho Android), Romain Guy đã làm rõ sự hiểu lầm khiến mọi người bắt đầu sử dụng RelativeLayouts cho mọi thứ. RelativeLayout luôn phải thực hiện hai phép đo. Nói chung nó là không đáng kể miễn là phân cấp khung nhìn của bạn là đơn giản. Nhưng nếu hệ thống phân cấp của bạn phức tạp, việc thực hiện một biện pháp vượt qua có thể khá tốn kém. Ngoài ra nếu bạn lồng RelativeLayouts, bạn sẽ nhận được một thuật toán đo lường theo hàm mũ.

https://www.youtube.com/watch?v=NYtB6mlu7vA&t=1m41s

https://www.youtube.com/watch?v=NYtB6mlu7vA&t=38m04s

+7

Tôi biết đây là một bài đăng cũ, nhưng bạn sẽ xem xét giải pháp nào tốn kém nhất khi lựa chọn giữa một relativelayout đơn và 2-3 linearlayouts? – Langkiller

+2

A ConstraintLayout :) – moyheen

50

Trừ khi bạn đang đặt nhiều Chế độ xem (ví dụ: trong một ListView), hiệu suất chọn giữa LinearLayout hoặc RelativeLayout là không đáng kể. Chọn tùy chọn nào thuận tiện nhất để sử dụng cho công việc và chỉ lo lắng về hiệu suất khi bạn cần.

Và đây là những gì các tài liệu chính thức về Creating Efficient Layouts nói về hiệu suất của RelativeLayout và LinearLayout:

Gắn bó với các tính năng cơ bản là tiếc là không hiệu quả nhất cách để tạo ra các giao diện người dùng. Ví dụ phổ biến là là lạm dụng LinearLayout, dẫn đến sự gia tăng số lượt xem trong chế độ xem phân cấp . Mọi chế độ xem - hoặc tệ hơn, mọi trình quản lý bố cục - bạn thêm vào ứng dụng của bạn có chi phí: khởi tạo, bố cục và bản vẽ trở nên chậm hơn. Thẻ bố trí có thể là đặc biệt tốn kém khi bạn làm tổ một số LinearLayout sử dụng tham số trọng số , yêu cầu con số được đo hai lần.

+3

biện minh cho nó không đáng kể? tôi tìm thấy điều này nêu rõ chi phí tương đốiThanh toán chi phí giống như tôi nghi ngờ https://bitbucket.org/spencerelliott/mercury/issue/1/changing-relativelayout-to-linearlayout – max4ever

+0

Chỉ cần tránh thêm các thùng chứa Bên trong. –

-15

Bạn có thể thử

<LinearLayout> 
     <ViewPager/><!--Loading images from net, it is very good as a testing case.--> 
     <ViewPagerIndicator/> 
     <TextView/> <!--Show some info about page--> 
</LinearLayout> 

<RelativeLayout>   
     <ViewPager/><!--Loading images from net, it is very good as a testing case.--> 
     <ViewPagerIndicator below="id of ViewPager"/> 
     <TextView below="id of ViewPagerIndicator"/> <!--Show some info about page--> 
</RelativeLayout> 

Bạn sẽ thấy rằng đang có rất nhiều khác nhau, nếu trang của bạn tải một số hình ảnh từ internet. Trong trường hợp này LinearLayout tốt hơn 100% so với RelativeLayout.

2

Relativelayout hiệu quả hơn Linearlayout.

Từ here:

Đó là một quan niệm sai lầm phổ biến mà sử dụng các cấu trúc bố trí cơ bản dẫn đến việc bố trí hiệu quả nhất. Tuy nhiên, mỗi tiện ích và bố cục bạn thêm vào ứng dụng của mình yêu cầu khởi tạo, bố cục và vẽ. Ví dụ, việc sử dụng các thể hiện lồng nhau của LinearLayout có thể dẫn đến một hệ thống phân cấp quá sâu. Hơn nữa, lồng ghép một số trường hợp của LinearLayout sử dụng tham số layout_weight có thể đặc biệt tốn kém vì mỗi đứa trẻ cần được đo hai lần. Điều này đặc biệt quan trọng khi bố cục được tăng lên nhiều lần, chẳng hạn như khi được sử dụng trong một ListView hoặc GridView.

+2

@phreakhead Bạn nói đúng là không có giải pháp "chính xác" nào. Đó là lý do tại sao giải pháp "đúng" hầu như luôn luôn quên đi hiệu suất hoàn toàn và làm bất cứ điều gì là dễ nhất để viết và đọc. –

+1

báo giá đó không sao lưu câu lệnh của bạn, điều này chỉ đúng trong một tình huống –

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