2012-05-19 6 views
7

Tôi có hiểu chính xác điều này không:Nếu một tài nguyên có thể vẽ được cung cấp cho ldpi, mdpi, hdpi, xhdpi, thì bạn không cần phải cung cấp tài liệu này cho nodpi?

Tất cả các thiết bị Android nằm trong một trong 4 nhóm mật độ này: ldpi, mdpi, hdpi, xhdpi. Vì vậy, nếu một tài nguyên có thể rút được cung cấp cho mỗi mật độ này (có thể vẽ hoặc cùng tên tồn tại trong mỗi thư mục này), thì không cần thiết phải cung cấp một ký tự có cùng tên trong/res/drawable hoặc/res/drawable-nodpi.

Chính sách của tôi có đúng không? Vì vậy, lý do duy nhất, tại sao nó có ý nghĩa để cung cấp cùng một tài nguyên trong/res/drawable sẽ là, để làm cho các ứng dụng tương lai hơn bằng chứng, trong trường hợp một xô mật độ mới được xác định cho hệ điều hành Android?

Trả lời

24

Tôi có chính xác không?

Thông qua đoạn này, bạn ít nhiều chính xác. Bạn đi một chút "tắt các đường ray" với đoạn tiếp theo của bạn:

Vì vậy, lý do duy nhất, tại sao nó có ý nghĩa để cung cấp cùng một tài nguyên trong/res/drawable sẽ làm cho ứng dụng tương lai hơn- bằng chứng, trong trường hợp một nhóm mật độ mới được xác định cho hệ điều hành Android?

Không thực sự.

Bạn đặt tài nguyên ở số res/drawable/ có thể mở rộng nội tại (ví dụ: ShapeDrawable). Bạn đặt tài nguyên trong res/drawable-nodpi/, vì một lý do nào đó, bạn không muốn được thu nhỏ để phù hợp với mật độ thiết bị.

Nếu Android phát hành một nhóm mật độ mới (ví dụ: -uhdpi với mật độ cực cao 400 dpi), Android có thể sẽ làm những gì hiện tại nếu bạn bỏ qua nhóm mật độ: quy mô một trong các ấn bản khác của bạn. Ví dụ: nếu bạn có -xhdpi và không có -hdpi, Android sẽ không lấy mẫu hình ảnh -xhdpi để sử dụng trên thiết bị -hdpi.

+0

Giải thích về khái niệm nodpi. –

0

Nếu tài nguyên của bạn được thêm cho tất cả bốn mật độ, thì bạn chính xác rằng bạn không để thêm đối tượng địa lý vào thư mục /res/drawable. Tuy nhiên, bạn đã đoán chính xác rằng tốt nhất là nên có thứ gì đó trong thư mục mặc định trong trường hợp nếu bộ định tính mới xuất hiện. Do đó, tôi khuyên bạn nên đặt các tài nguyên mdpi không vào thư mục /res/drawable-mdpi, nhưng thay vào đó là thư mục mặc định (/res/drawable/). Đó là một thực hành tốt cho mọi loại tài nguyên.

Đối với thư mục /res/drawable-nodpi, nó là một thư mục đặc biệt, vì nó được cho là chứa các tài nguyên không tự động mở rộng không giống như tất cả các loại vòng loại khác. Do đó, bạn thường chỉ sử dụng thư mục /res/drawable-nodpi một mình hoặc hoàn toàn không sử dụng.

+0

Vì vậy, tại sao các downvote? Điều gì là không chính xác trong câu trả lời? – Malcolm

5

Điều này là chính xác, miễn là bạn có thể rút trong tất cả 4 nhóm mật độ mà bạn được bảo hiểm. Một thực tế phổ biến là làm cho một tùy chỉnh drawable trong/res/drawable trong đó đề cập đến mật độ kéo dài của bạn drawables.

Ví dụ: bạn có thể muốn nút có các trạng thái khác nhau được nhấn và không được nhấn. Đầu tiên, bạn sẽ bao gồm một drawable của mỗi mật độ cho một nút nhấn và unpressed.Sau đó, bạn có thể tạo button_black_selector.xml sau trong/res/drawables:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:state_pressed="false" 
     android:drawable="@drawable/button_black"/> 

    <item android:state_pressed="true" 
     android:drawable="@drawable/button_black_selected" /> 

</selector> 
+0

Cách tiếp cận thú vị và thanh lịch, tx, David Z – mrd