2012-08-01 38 views
27

Extract từ Android liên kết Hướng dẫn cho nhà phát triển trên:Thư mục mdpi, hdpi, xhdpi hoạt động như thế nào?

320dp: một màn hình điện thoại điển hình (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, vv).
480dp: một máy tính bảng tweener như Streak (480x800 mdpi).
600dp: máy tính bảng 7 inch (600x1024 mdpi).
720dp: 10” tablet (720x1280 mdpi, 800x1280 mdpi, vv)

Vì vậy, tôi đã nhận đồ họa (hình ảnh) ở độ phân giải 320 pixel mỗi inch từ nhà thiết kế trong các chiều kích chỉ

480x800 hdpi

720x1280 mdpi

800x1280 mdpi

tôi bối rối mà kích thước của hình ảnh nên được đặt trong thư mục mdpi, hdpi thư mục và thư mục xhdpi. Tôi muốn tạo một ứng dụng có thể hoạt động trên hầu hết các điện thoại và máy tính bảng Android?

Trả lời

36

Bạn có thể tạo các đối tượng đồ họa khác nhau để sử dụng ở các mật độ pixel khác nhau. Android xử lý mdpi (160 pixel/inch) làm mật độ cơ bản. Vì vậy, đối với các thiết bị mdpi, 1 dp = 1 pixel. Ở mật độ cao hơn, có nhiều pixel hơn mỗi inch (240 cho hdpi, 320 cho xhdpi). Android cố gắng làm cho hình ảnh đồ họa chiếm cùng kích thước vật lý trên màn hình bất kể mật độ pixel của thiết bị. Vì vậy, nếu tất cả nó tìm thấy là một tài nguyên mdpi, và thiết bị là hdpi, nó sẽ mở rộng đồ họa bằng 240/160 = 150%, và nó sẽ tăng gấp đôi kích thước của đồ họa cho xhdpi.

Nếu bạn không muốn chia tỷ lệ tự động này (có thể làm cho đồ họa trông kém), bạn chỉ cần cung cấp phiên bản tài nguyên đồ họa của riêng mình để sử dụng ở mật độ cao hơn. Những đồ họa này phải có cùng kích thước mà Android sẽ mở rộng tài nguyên mdpi.

Lưu ý rằng pixel/inch được lưu trữ trong tệp hình ảnh không liên quan gì đến điều này. Tất cả đều dựa trên nơi bạn đặt các tệp đồ họa trong thư mục tài nguyên cho dự án của bạn. Bất kỳ đồ họa nào được đặt trong res/drawable được giả định là có kích thước phù hợp cho màn hình mdpi, cũng như đồ họa được đặt trong res/drawable-mdpi.Các tệp hình ảnh mà nó tìm thấy trong res/drawable-hdpi được giả định là có kích thước phù hợp cho màn hình hdpi, v.v. Khi chương trình của bạn chạy trên một thiết bị cụ thể, trước tiên Android sẽ tìm một đồ họa khớp với mật độ hiển thị của thiết bị đó. Nếu nó không tìm thấy một nhưng thay vì tìm thấy một cho một mật độ khác nhau, nó sẽ sử dụng và tự động mở rộng quy mô hình ảnh dựa trên các quy tắc trên.

+0

Như bạn đã nói "Các tệp hình ảnh tìm thấy trong res/drawable-hdpi được giả định là đúng kích cỡ cho màn hình hdpi, v.v." vì vậy tôi sẽ đặt 480x800 hdpi trong res/drawable-hdpi ?? –

+0

Ngoài ra tôi có cần thay đổi tỷ lệ pixel trên inch cho tất cả các hình ảnh có kích thước 480x800 vì chúng được đặt trong thư mục res/drawable-hdpi vì vậy bắt buộc phải có độ phân giải (pixel trên inch) phải là 240 dpi ?? như tôi có tất cả những hình ảnh này trong 320 dpi? OR dpi thực sự không quan trọng ở đây? –

+1

@MuhammadIrfan - Bạn sẽ đặt hình ảnh trong 'res/drawable-hdpi' nếu kích thước phù hợp với màn hình là 240 pixel/inch. Bạn nên lưu ý rằng các thiết bị có thể có kích thước khác nhau và vẫn là hdpi. Ngoài ra, các thiết bị có thể có cùng kích thước và có mật độ điểm ảnh khác nhau. Sự thật không may này được gọi là "phân mảnh thiết bị" và là một phần lý do tại sao lập trình Android có thể phức tạp. Bạn đang cố gắng khớp chính xác hình ảnh với kích thước của màn hình? –

3

Tôi tự nhầm lẫn với tất cả phân mảnh kích thước màn hình nhưng cơ bản là: 1. Bạn cần tạo nhiều thư mục khác nhau trong bố cục để làm việc với hình ảnh của mình 2. Hình ảnh sẽ tồn tại trong thư mục drawables cũng trong các thư mục khác nhau . 3. Bạn nên có một thư mục cơ bản/bố trí và/drawable để đi kèm với các thư mục không cụ thể 4. Làm việc từ xhdpi sau đó chia tỷ lệ hình ảnh xuống!

Ví dụ cho các thư mục màn hình cụ thể: /layout-hdpi /layout-xhdpi /drawable-hdpi /drawable-xhdpi

Từ những gì tôi biết: 480 x 800 hdpi (điện thoại cũ ví dụ như S2 , HTC Desire vv) 720 x 1280 là xhdpi (điện thoại mới ví dụ như S3, Galaxy Nexus v.v.)

Về cơ bản, Tùy thuộc vào điện thoại, android sẽ lấy tài nguyên từ thư mục cần thiết và nếu không có thì nó sẽ lấy từ thư mục chính '\ layout' hoặc '\ drawable'. Ví dụ: ứng dụng chạy trên Galaxy Nexus sẽ lấy tài nguyên từ '\ layout-xhdpi' nếu thư mục tồn tại.

+1

Theo [Trang tổng quan Android] (http://developer.android.com/about/dashboards/index. html) các thiết bị ldpi và mdpi chiếm 23,2% số thiết bị đã truy cập Google Play trong vòng hai tuần qua. Ngoài ra, kích thước màn hình và mật độ pixel là các biến độc lập. Ví dụ, có 480 x 800 thiết bị mdpi. –

+1

Tôi sẽ google này nhưng thực sự cbf lol. Cảm ơn mặc dù, nó nhiều hơn tôi nghĩ. Nhưng trong một năm, con số đó có lẽ sẽ bằng một nửa hoặc ít hơn. Cũng lưu ý, một số điện thoại đang xem xét độ phân giải 1080p mà tôi nghĩ là ngu ngốc ... (Tôi vừa chuyển đổi ứng dụng của mình từ hdpi sang xhdpi và nó là một bãi biển lol) – karlstackoverflow

+0

@TedHopp +1 bài đăng của bạn. – karlstackoverflow

0

có, bạn có thể làm cho một ứng dụng, nhưng đã cần tạo thư mục:/res/drawable,/res/drawable-mdpi,/res/drawable-hdpi và thêm nội dung cho tất cả các màn hình kích thước

10

Khi bạn yêu cầu tài nguyên mà bạn cung cấp các lựa chọn thay thế, Android chọn tài nguyên thay thế để sử dụng trong thời gian chạy, tùy thuộc vào cấu hình thiết bị hiện tại. Để chứng minh như thế nào Android chọn một tài nguyên thay thế, giả sử các thư mục drawable sau mỗi chứa phiên bản khác nhau của hình ảnh giống nhau:

drawable/ 
drawable-en/ 
drawable-fr-rCA/ 
drawable-en-port/ 
drawable-en-notouch-12key/ 
drawable-port-ldpi/ 
drawable-port-notouch-12key/ 

Và giả định sau đây là cấu hình thiết bị:

Locale = en-GB 
Screen orientation = port 
Screen pixel density = hdpi 
Touchscreen type = notouch 
Primary text input method = 12key 

Bằng cách so sánh thiết bị cấu hình cho các tài nguyên thay thế có sẵn, Android chọn drawables từ drawable-en-port. hệ thống

mà đến lúc quyết định của mình mà nguồn lực để sử dụng với logic sau:

enter image description here

Ref: How Android Finds the Best-matching Resource

Tài liệu tham khảo khác: Density independence, Providing Alternative ResourcesBest Practices

Và tôi sẽ nói rằng bạn nên đọc trang đầy đủSupporting Multiple Screens, tôi không nghĩ rằng không có tài liệu nào tốt hơn nó ...

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