2012-04-04 15 views
6

Ứng dụng của tôi hiển thị giao diện người dùng một cửa sổ hoặc giao diện người dùng hai cửa sổ tùy thuộc vào cấu hình màn hình. Trên màn hình nhỏ hơn, nó phải là một cửa sổ cả về chân dung và phong cảnh. Trên màn hình cỡ trung (bất kỳ thứ gì có "chiều rộng nhỏ nhất" 600dp trở lên), hướng ngang bao gồm bố cục hai ngăn khá tốt, nhưng theo hướng dọc, nên sử dụng bố cục một cửa sổ. Trên màn hình lớn hơn, nên sử dụng bố cục hai ngăn trên cả hai hướng. Tôi cũng muốn hỗ trợ các vòng loại phong cách 3.2+ (như sw600dp và sw720dp) cũng như vòng loại "kích thước nhóm" cũ hơn ("xlarge").Làm cách nào để tạo một số cấu hình màn hình khác nhau cho một tập hợp các bố cục nhỏ mà không cần phải sao chép các phần của XML bố cục của tôi?

Cách trực tiếp nhất để làm điều này là tạo ra các file layout XML khác nhau, một cho mỗi cấu hình:

  • res/layout-sw600dp đất/main.xml
  • res/layout-sw600dp- cổng/main.xml
  • res/layout-sw720dp đất/main.xml
  • res/layout-sw720dp cổng/main.xml
  • res/layout-xlarge cổng/main.xml
  • lại s/layout-xlarge đất/main.xml
  • res/layout cổng/main.xml
  • res/layout/main.xml

Kết quả là, có rất nhiều sự trùng lặp mã trong 8 tệp XML này về cơ bản chỉ mô tả hai bố cục riêng biệt.

Làm cách nào tôi có thể thực hiện việc này mà không cần phải duy trì tất cả các tệp XML trùng lặp này, đó là một vấn đề đau đầu bảo trì?

Trả lời

11

Bạn có thể sử dụng bí danh bố cục. Thay vì mô tả bố cục của bạn trực tiếp trong các tệp XML cho mỗi cấu hình màn hình, bạn nên định nghĩa hai bố cục của mình trong hai tệp XML được gọi là "onepane.xml" và "twopanes.xml". Các tệp này nằm trong res/layout.

Bây giờ, bạn phải ánh xạ các bố cục này với cấu hình màn hình khác nhau của bạn và đó là nơi kỹ thuật "bí danh bố cục" có ích. Đối với mỗi kết hợp bộ định tính màn hình, hãy tạo tệp XML trong res/values-X/layout.xml, trong đó X là kết hợp bộ định tính. Trong tập tin đó, tuyên bố một nguồn lực bố trí trỏ đến một trong hai @ layout/onepane hoặc @ layout/twopanes, nếu thích hợp:

res/values-sw600dp đất/Layout.xml:

<resources> 
    <item name="main" type="layout">@layout/twopanes</item> 
</resources> 

res/values-sw600dp cổng/Layout.xml:

<resources> 
    <item name="main" type="layout">@layout/onepane</item> 
</resources> 

làm tương tự cho các kết hợp cấu hình khác của bạn, và cách mà bạn có thể thực hiện những gì bạn đang tìm kiếm: bạn có thể ánh xạ hai layou của bạn ts (onepane và twopane) cho một số cấu hình màn hình khác nhau mà không cần phải sao chép bố cục của bạn.

Để biết thêm thông tin về vấn đề này, hãy nhìn vào các "Hỗ trợ Nhiều Screens" bài học về Android Training: http://developer.android.com/training/multiscreen/screensizes.html#TaskUseAliasFilters

+0

này không làm việc cho tôi - tôi nhận được cảnh báo Lint và một vụ tai nạn khi chạy. Có ví dụ nào về việc này không? –

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