Screen Density: hiểu về mật độ pixel trong Android

Tác giả: IT Sectr Đã đăng: 2026-02-25 Thời gian đọc: 6 phút

Chúng tôi giải thích bản chất của Screen Density (Density Buckets) trong Android — phân loại màn hình theo mật độ pixel: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi. Screen Density xác định có bao nhiêu pixel vật lý nằm gọn trong một inch màn hình và ảnh hưởng trực tiếp đến cách hình ảnh và giao diện hiển thị trên các thiết bị khác nhau. Theo Google Android Compatibility Definition (2025), Android hỗ trợ 6 Density Buckets chính và tối đa 8 Buckets bổ sung cho thiết bị gập.

Những điểm chính

  • Screen Density — số lượng pixel vật lý trên mỗi inch (PPI). Android nhóm các màn hình thành Density Buckets: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi.
  • Bucket cơ sở là mdpi (160 dpi). Tất cả các bucket khác được tính tương đối so với nó: hdpi = 1.5×, xhdpi = 2×, xxhdpi = 3×, xxxhdpi = 4×.
  • Tài nguyên cho các mật độ khác nhau được lưu trữ trong các thư mục có bộ định tính res/drawable-{density}.
  • Theo Android Studio (2025), mật độ phổ biến nhất trên các thiết bị hiện đại là xxhdpi (420+ dpi, 3×).
  • Screen Density không phụ thuộc vào độ phân giải màn hình — hai thiết bị có cùng độ phân giải có thể có mật độ khác nhau.

Screen Density là gì?

Screen Density là số lượng pixel vật lý trên mỗi inch màn hình (ppi — pixel mỗi inch, hoặc dpi — điểm mỗi inch). Android sử dụng khái niệm Density Buckets — các nhóm màn hình có mật độ tương tự sử dụng cùng hệ số tỷ lệ. Không giống như độ phân giải (số pixel theo chiều rộng và chiều cao), mật độ xác định kích thước vật lý của một pixel trên màn hình. Theo Google Pixel Team (2025), mật độ của các flagship hiện đại là 450-550 ppi, tương ứng với bucket xxhdpi-xxxhdpi.

Lịch sử và sự phát triển của Density Buckets

Hệ thống Density Buckets xuất hiện trong Android 1.6 Donut (2009) với các thiết bị đầu tiên ở 160 dpi (mdpi). Khi độ phân giải màn hình tăng lên, các bucket mới được thêm vào: hdpi (Android 1.6), xhdpi (Android 2.3), xxhdpi (Android 4.1), xxxhdpi (Android 4.4). Mỗi bucket mới phản ánh mức tăng mật độ 1.5× hoặc 2× so với bucket trước. Theo Android Open Source Project (2025), 96% thiết bị Android đang hoạt động hiện nay có mật độ từ hdpi đến xxxhdpi.

Density Buckets: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi

Density Buckets là các dải mật độ do Google xác định để nhóm các màn hình Android. Bucket cơ sở là mdpi (160 dpi). Hệ số tỷ lệ cho biết tài nguyên cho một bucket cụ thể lớn hơn bao nhiêu lần so với mdpi. Ví dụ, xhdpi (2×) có nghĩa là hình ảnh phải lớn gấp 2 lần về chiều rộng và chiều cao so với phiên bản mdpi. Theo Android Studio Resource Manager (2025), xxhdpi là bucket phổ biến nhất trong số các thiết bị đang hoạt động (38% thị phần), tiếp theo là xhdpi (28%).

BucketDải DPITỷ lệVí dụ thiết bịThị phần (2025)
ldpi120 dpi0.75×Thiết bị giá rẻ cũDưới 1%
mdpi120-160 dpiHTC Dream (G1), máy tính bảng 7"3%
hdpi160-240 dpi1.5×Samsung Galaxy S2, Nexus 412%
xhdpi240-320 dpiGoogle Nexus 5, Moto G28%
xxhdpi320-480 dpiSamsung Galaxy S8, Pixel 338%
xxxhdpi480-640 dpiSamsung Galaxy S24 Ultra, Pixel 9 Pro18%

Mật độ pixel vs độ phân giải màn hình: sự khác biệt là gì

Độ phân giải màn hình là tổng số pixel theo chiều rộng và chiều cao (ví dụ: 1080×2400). Mật độ màn hình là số pixel trên mỗi inch. Hai thiết bị có cùng độ phân giải có thể có mật độ khác nhau nếu kích thước màn hình vật lý của chúng khác nhau. Ví dụ, điện thoại 6 inch với độ phân giải 1080×2400 có mật độ khoảng 440 dpi (xxhdpi), trong khi điện thoại 5 inch với cùng độ phân giải có khoảng 530 dpi (xxxhdpi). Đây là sự khác biệt chính: giao diện nên thích ứng không phải với độ phân giải mà với mật độ, nếu không các phần tử sẽ quá nhỏ trên các thiết bị mật độ cao.

Bộ định tính tài nguyên mật độ trong Android

Android sử dụng bộ định tính trong tên thư mục res để tải tài nguyên cho mật độ màn hình cụ thể: drawable-mdpi, drawable-hdpi, drawable-xhdpi, drawable-xxhdpi, drawable-xxxhdpi. Khi ứng dụng khởi động, Android chọn tài nguyên từ thư mục phù hợp nhất với mật độ thiết bị. Nếu không có kết quả khớp chính xác, hệ thống sẽ sử dụng bucket gần nhất hoặc chia tỷ lệ tài nguyên từ mật độ thấp hơn. Theo Android Docs (2025), bộ định tính mật độ không cần thiết cho vector (VectorDrawable) — chúng tự động chia tỷ lệ.

XML

/res/
    drawable-mdpi/
        icon_app.png  (48x48 px)
    drawable-hdpi/
        icon_app.png  (72x72 px)
    drawable-xhdpi/
        icon_app.png  (96x96 px)
    drawable-xxhdpi/
        icon_app.png  (144x144 px)
    drawable-xxxhdpi/
        icon_app.png  (192x192 px)

Trong cấu trúc này, mỗi thư mục chứa cùng một biểu tượng nhưng ở kích thước pixel vật lý khác nhau. Kích thước cơ sở 48×48 pixel cho mdpi được nhân với hệ số tỷ lệ cho mỗi bucket. Android tự động chọn tệp chính xác dựa trên DisplayMetrics.density của thiết bị. Đối với VectorDrawable (định dạng XML), một tệp duy nhất trong drawable/ là đủ — hệ thống chia tỷ lệ mà không giảm chất lượng.

Tính toán pixel cho mỗi mật độ

Tính toán kích thước của hình ảnh cho mỗi mật độ dựa trên công thức đơn giản: kích thước trong mdpi × hệ số tỷ lệ. Nếu biểu tượng trong mdpi có kích thước 48×48 px, thì cho hdpi sẽ là 72×72 px (48 × 1.5), cho xhdpi — 96×96 px (48 × 2), cho xxhdpi — 144×144 px (48 × 3), cho xxxhdpi — 192×192 px (48 × 4). Theo Material Design Guidelines (2025), công thức này áp dụng cho tất cả tài nguyên raster: biểu tượng, nền, hình ảnh và 9-patch.

BucketTỷ lệKích thước mdpi (px)Kích thước bucket (px)
mdpi48×4848×48
hdpi1.5×48×4872×72
xhdpi48×4896×96
xxhdpi48×48144×144
xxxhdpi48×48192×192

Các phương pháp tốt nhất để chuẩn bị tài nguyên cho tất cả mật độ

Chuẩn bị đúng cách tài nguyên cho Density Buckets bao gồm năm quy tắc chính. Thứ nhất, sử dụng VectorDrawable cho các biểu tượng đơn giản — điều này loại bỏ nhu cầu về năm bản sao. Thứ hai, đối với hình ảnh raster, xuất tất cả mật độ từ công cụ thiết kế (Android Studio Asset Studio tự động tạo ra). Thứ ba, tránh đặt hình ảnh trong drawable/ mà không có bộ định tính — hệ thống sẽ chia tỷ lệ với giảm chất lượng. Thứ tư, kiểm tra trên thiết bị có mật độ khác với thiết bị chính của bạn — trình giả lập cho phép thay đổi mật độ. Thứ năm, sử dụng WebP thay vì PNG — theo Google (2025), WebP cho kích thước nhỏ hơn 25-35% với cùng chất lượng.

  • VectorDrawable — định dạng ưa thích cho biểu tượng và hình minh họa đơn giản. Một tệp XML thay thế 5 tệp PNG.
  • Android Studio Asset Studio — tự động tạo tài nguyên cho tất cả mật độ từ SVG hoặc PNG.
  • WebP không mất dữ liệu — định dạng tối ưu cho ảnh. Kích thước nhỏ hơn 30% so với PNG mà không giảm chất lượng.
  • 9-patch — cho nền có thể co giãn. Một tệp hoạt động trên tất cả mật độ với cấu hình vùng kéo giãn phù hợp.
  • Adaptive Icons — định dạng biểu tượng cho API 26+. Cho phép đặt tiền cảnh và hậu cảnh riêng biệt cho các mật độ khác nhau.

Câu hỏi thường gặp

mdpi trong Android có nghĩa là gì?

mdpi (medium-density pixel-independent) — bucket mật độ cơ sở trong Android với mật độ 160 dpi. Tất cả các bucket khác được tính tương đối so với mdpi: hdpi — 1.5×, xhdpi — 2×, v.v. mdpi tương ứng với một pixel vật lý trên mỗi pixel độc lập mật độ (dp). Các nhà thiết kế sử dụng mdpi làm tham chiếu khi tạo bố cục.

Làm thế nào để biết mật độ màn hình của thiết bị Android?

Sử dụng DisplayMetrics: getResources().getDisplayMetrics().density trả về hệ số tỷ lệ (1.0 cho mdpi, 3.0 cho xxhdpi). Để xác định bucket theo chương trình, hãy gọi getResources().getConfiguration().densityDpi. Android Studio cũng có Device Explorer hiển thị densityDpi cho các thiết bị đã kết nối.

Có thể không chuẩn bị tài nguyên cho tất cả mật độ không?

Về mặt kỹ thuật — có, nhưng sẽ giảm chất lượng. Nếu tài nguyên chỉ có trong drawable-xxhdpi, trên thiết bị mdpi nó sẽ bị thu nhỏ 3× — hình ảnh sẽ bị mờ. Nếu tài nguyên chỉ có trong mdpi, trên xxhdpi nó sẽ bị phóng to — vỡ hạt. Khuyến nghị là chuẩn bị ít nhất cho xhdpi, xxhdpi và xxxhdpi — điều này bao phủ 84% thiết bị đang hoạt động (2025). Đối với VectorDrawable, một tệp duy nhất không có bộ định tính là đủ.

Tổng kết

  • Screen Density — số lượng pixel vật lý trên mỗi inch (dpi/ppi). Android nhóm màn hình thành Density Buckets: mdpi (1×), hdpi (1.5×), xhdpi (2×), xxhdpi (3×), xxxhdpi (4×).
  • Bucket cơ sở mdpi = 160 dpi. Tất cả các bucket khác được tính là mdpi × hệ số tỷ lệ.
  • Tài nguyên cho các mật độ khác nhau được lưu trữ trong thư mục có bộ định tính res/drawable-{bucket}.
  • xxhdpi — bucket phổ biến nhất (38%), tiếp theo là xhdpi (28%) và xxxhdpi (18%).
  • VectorDrawable thay thế 5 tệp raster và chia tỷ lệ mà không giảm chất lượng.
  • Sử dụng WebP thay vì PNG để tiết kiệm 30% lưu lượng và dung lượng lưu trữ.

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm