Sự khác biệt giữa những trang cá nhân, thời gian ngắn, thời gian và sự khác biệt là gì?


5815

Sự khác biệt giữa các đơn vị đo lường Android là gì?

  • px
  • nhúng
  • dp
  • sp

65
đây là sự khác biệt hoàn toàn giữa px, dip, dp và sp trong android [ developer.android.com/guide/topics/resource/
Kẻ

20
Bộ chuyển đổi tiện lợi này cho thấy nó tốt nhất , theo ý kiến ​​của tôi. Nó cũng cực kỳ hữu ích để xuất các họa tiết từ Photoshop hoặc thiết kế bố cục của bạn cho kích thước vật lý.
Paul Lammertsma

9
mô tả mới về Đơn vị và số đo của
Arnav M.


1
Vật liệu thiết kế với pixel mật độ material.io/design/layout/...
Shomu

Câu trả lời:


5771

Từ Tài liệu dành cho nhà phát triển Android :

  1. px
    Pixels - tương ứng với các pixel thực tế trên màn hình.

  2. tính bằng
    inch - dựa trên kích thước vật lý của màn hình.
    1 Inch = 2,54 cm

  3. mm
    Millimet - dựa trên kích thước vật lý của màn hình.


  4. Điểm pt - 1/72 inch dựa trên kích thước vật lý của màn hình.

  5. dp hoặc nhúng
    Mật độ phụ thuộc Pixels - một đơn vị trừu tượng dựa trên mật độ vật lý của màn hình. Các đơn vị này có liên quan đến màn hình 160 dpi, vì vậy một dp là một pixel trên màn hình 160 dpi. Tỷ lệ dp-pixel sẽ thay đổi theo mật độ màn hình, nhưng không nhất thiết phải theo tỷ lệ trực tiếp. Lưu ý: Trình biên dịch chấp nhận cả "nhúng" và "dp", mặc dù "dp" phù hợp hơn với "sp".

  6. sp
    Scale -independent Pixels - điều này cũng giống như các đơn vị dp, nhưng nó cũng được thu nhỏ lại bởi sở thích kích thước phông chữ của người dùng. Bạn nên sử dụng đơn vị này khi chỉ định kích thước phông chữ, vì vậy chúng sẽ được điều chỉnh cho cả mật độ màn hình và tùy chọn của người dùng.

Từ sự hiểu biết về mật độ độc lập trong Android :

+----------------+----------------+---------------+-------------------------------+
| Density Bucket | Screen Density | Physical Size | Pixel Size                    | 
+----------------+----------------+---------------+-------------------------------+
| ldpi           | 120 dpi        | 0.5 x 0.5 in  | 0.5 in * 120 dpi = 60x60 px   | 
+----------------+----------------+---------------+-------------------------------+
| mdpi           | 160 dpi        | 0.5 x 0.5 in  | 0.5 in * 160 dpi = 80x80 px   | 
+----------------+----------------+---------------+-------------------------------+
| hdpi           | 240 dpi        | 0.5 x 0.5 in  | 0.5 in * 240 dpi = 120x120 px | 
+----------------+----------------+---------------+-------------------------------+
| xhdpi          | 320 dpi        | 0.5 x 0.5 in  | 0.5 in * 320 dpi = 160x160 px | 
+----------------+----------------+---------------+-------------------------------+
| xxhdpi         | 480 dpi        | 0.5 x 0.5 in  | 0.5 in * 480 dpi = 240x240 px | 
+----------------+----------------+---------------+-------------------------------+
| xxxhdpi        | 640 dpi        | 0.5 x 0.5 in  | 0.5 in * 640 dpi = 320x320 px | 
+----------------+----------------+---------------+-------------------------------+
+---------+-------------+---------------+-------------+--------------------+
| Unit    | Description | Units Per     | Density     | Same Physical Size | 
|         |             | Physical Inch | Independent | On Every Screen    | 
+---------+-------------+---------------+-------------+--------------------+
| px      | Pixels      | Varies        | No          | No                 | 
+---------+-------------+---------------+-------------+--------------------+
| in      | Inches      | 1             | Yes         | Yes                | 
+---------+-------------+---------------+-------------+--------------------+
| mm      | Millimeters | 25.4          | Yes         | Yes                | 
+---------+-------------+---------------+-------------+--------------------+
| pt      | Points      | 72            | Yes         | Yes                | 
+---------+-------------+---------------+-------------+--------------------+
| dp      | Density     | ~160          | Yes         | No                 | 
|         | Independent |               |             |                    | 
|         | Pixels      |               |             |                    | 
+---------+-------------+---------------+-------------+--------------------+
| sp      | Scale       | ~160          | Yes         | No                 | 
|         | Independent |               |             |                    | 
|         | Pixels      |               |             |                    | 
+---------+-------------+---------------+-------------+--------------------+

Thông tin thêm cũng có thể được tìm thấy trong Tài liệu thiết kế của Google .


17
mặc dù chúng giống nhau nhưng tôi có xu hướng gặp nhiều vấn đề với dp trong khi mọi thứ đều hoạt động tốt với dip
DallaRosa

247
Một lưu ý về db ​​/ sp không hoàn toàn rõ ràng: Tỷ lệ xảy ra đối với những điều này không phụ thuộc vào mật độ thực của thiết bị (dpi) mà phụ thuộc vào "xô" mật độ mà nó rơi vào: các thùng có sẵn là: 120,160,240,320. Điều này có thể gây ra một số vấn đề xử lý màn hình khác nhau đáng kể nhưng bị xô giống nhau.
Fraggle

15
Lưu ý rằng tài liệu không còn đề cập đến "nhúng" nữa, chỉ là "dp", mặc dù trình biên dịch dường như vẫn chấp nhận "nhúng".
Adam Rosenfield

15
@android_developer (5 bình luận ở trên) dpkhông không có chiều dài cơ thể cùng chính xác. (Mặc dù nó rất gần.) Xem bình luận của @ Fraggle về xô. Điều này có nghĩa là 48dp sẽ có kích thước khoảng 8 mm (0,3 inch), nhưng nó có thể thay đổi tới 11mm.
intrepidis

11
Lý do cho việc vênh là để các nhà phát triển có thể kiểm tra ứng dụng của họ trên một vài thiết bị có mật độ khác nhau và tự tin rằng bố cục sẽ giống nhau trên vô số thiết bị. Vì vậy, ngay cả khi kích thước vật lý của các nút vv thay đổi một chút, giao diện tổng thể của một hoạt động sẽ giống nhau.
intrepidis

685

Khá nhiều thứ về điều này và làm thế nào để đạt được sự hỗ trợ tốt nhất cho nhiều màn hình có kích thước và mật độ khác nhau được ghi lại rất rõ ở đây:

Kích thước màn hình Kích thước
vật lý thực tế, được đo bằng đường chéo của màn hình. Để đơn giản, Android nhóm tất cả các kích thước màn hình thực tế thành bốn kích thước tổng quát: nhỏ, bình thường, lớn và cực lớn.

Mật độ màn hình
Số lượng pixel trong một vùng vật lý của màn hình; thường được gọi là dpi (số chấm trên mỗi inch). Ví dụ: màn hình mật độ "thấp" có ít pixel hơn trong một vùng vật lý nhất định, so với màn hình mật độ "bình thường" hoặc "cao". Để đơn giản, Android nhóm tất cả các mật độ màn hình thực tế thành sáu mật độ tổng quát: thấp, trung bình, cao, cực cao, cực cao, cực cao và cực cao.

Định hướng Định
hướng của màn hình theo quan điểm của người dùng. Đây là phong cảnh hoặc dọc, nghĩa là tỷ lệ khung hình của màn hình tương ứng rộng hoặc cao. Xin lưu ý rằng không chỉ các thiết bị khác nhau hoạt động theo các hướng khác nhau theo mặc định, mà hướng có thể thay đổi khi chạy khi người dùng xoay thiết bị.

Độ phân giải
Tổng số pixel vật lý trên màn hình. Khi thêm hỗ trợ cho nhiều màn hình, các ứng dụng không hoạt động trực tiếp với độ phân giải; các ứng dụng chỉ nên được quan tâm với kích thước và mật độ màn hình, như được chỉ định bởi các nhóm kích thước và mật độ tổng quát.

Pixel độc lập với mật độ (dp)
Đơn vị pixel ảo mà bạn nên sử dụng khi xác định bố cục UI, để thể hiện kích thước hoặc vị trí bố cục theo cách độc lập với mật độ. Pixel độc lập với mật độ tương đương với một pixel vật lý trên màn hình 160 dpi, đây là mật độ cơ sở được hệ thống giả định cho màn hình mật độ "trung bình". Khi chạy, hệ thống xử lý một cách trong suốt mọi tỷ lệ của các đơn vị dp, khi cần thiết, dựa trên mật độ thực tế của màn hình đang sử dụng. Việc chuyển đổi các đơn vị dp thành pixel màn hình rất đơn giản : px = dp * (dpi / 160). Ví dụ: trên màn hình 240 dpi, 1 dp bằng 1,5 pixel vật lý. Bạn phải luôn sử dụng các đơn vị dp khi xác định giao diện người dùng của ứng dụng để đảm bảo hiển thị đúng giao diện người dùng của bạn trên màn hình với mật độ khác nhau.

Nếu bạn nghiêm túc về việc phát triển ứng dụng Android cho nhiều loại thiết bị, bạn nên đọc tài liệu phát triển hỗ trợ màn hình ít nhất một lần. Thêm vào đó, luôn luôn là một điều tốt để biết số lượng thiết bị hoạt động thực tế có cấu hình màn hình cụ thể.


41
Vậy nếu bạn sử dụng dp cho một nút và sp cho kích thước phông chữ của văn bản nút, điều gì xảy ra khi người dùng bắt đầu chia tỷ lệ? Văn bản sẽ phóng to, nhưng nút này có phù hợp với điều này bằng cách phóng to không?
Wytze

11
@Wytze, không. Đối với những thứ phù hợp với văn bản có thể là một vấn đề, tôi sẽ chỉ sử dụng nhúng để mọi thứ không bị tràn.
eski

12
@Wytze Và ngược lại, tôi sử dụng sp cho cả văn bản và bất cứ thứ gì nó chứa. Ví dụ: nếu tôi có một nút có kích thước cố định và văn bản bên trong nó, tôi sẽ chỉ định kích thước nút theo sp để nó tăng lên khi cần thiết. Nếu không, người dùng sẽ khó chịu khi anh ta tăng kích thước của văn bản và nó không tăng. Tất nhiên, bố cục phải đủ linh hoạt để cho phép nó.
Malcolm

2
Nếu các nhà thiết kế của bạn sẽ không chừa chỗ cho các yếu tố dựa trên văn bản để chia tỷ lệ theo kích thước sp, một tùy chọn là chuyển sang bất kỳ bố cục nào bạn sử dụng cho thiết bị hẹp hơn, sau đó mở rộng mọi thứ đồng đều theo (DisplayMetrics.scaledD mật / DisplayMetrics. tỉ trọng).
John Mellor

@Sam thiếu bất kỳ không gian trống nào cũng sẽ gây ra sự cố trong i18n
giảm hoạt động

347

Tôi sẽ giải thích chi tiết hơn về cách chính xác dp chuyển đổi sang px:

  • Nếu chạy trên thiết bị mdpi, 150 x 150 pxhình ảnh sẽ chiếm 150 * 150 dpkhông gian màn hình.
  • Nếu chạy trên thiết bị hdpi, 150 x 150 pxhình ảnh sẽ chiếm 100 * 100 dpkhông gian màn hình.
  • Nếu chạy trên thiết bị xhdpi, 150x150 pxhình ảnh sẽ chiếm 75 * 75 dpkhông gian màn hình.

Một cách khác: giả sử, bạn muốn thêm một hình ảnh vào ứng dụng của mình và bạn cần nó để điền vào một 100 * 100 dpđiều khiển. Bạn sẽ cần tạo hình ảnh kích thước khác nhau cho kích thước màn hình được hỗ trợ:

  • 100 * 100 px hình ảnh cho mdpi
  • 150 * 150 px hình ảnh cho hdpi
  • 200 * 200 px hình ảnh cho xhdpi

2
Làm cách nào để tính toán các pixel cho hdpi, ldpi, mdpi, v.v. Tôi nghe nói chúng tôi sử dụng công thức này..px = dp * (dpi / 160); bạn có thể giải thích cho tôi với công thức này plz?
Rakesh patanga 7/03/2015

@Rakeshpatanga Với mật độ 160 dpi, 1 px = 1 dp (trừu tượng pixel vật lý và dp là như nhau). Nghĩa là, đối với một dp duy nhất, chúng ta có (1) * (160/160) = 1, hoặc chính xác là 1 px. Ở mật độ cao hơn 320 dpi, một dp là (1) * (320/160) = 2 pixel và hai dp là (2) * (320/160) = 4 px.
samis

Sắp xếp những thứ này trong không gian để xem: | 1dp |, | ___ | ___ | 160, | _ | _ | _ | _ | 320 (đặt ngắt dòng sau dấu phẩy). | _ | = 1 p i x el.
samis

lại "Bạn sẽ cần tạo hình ảnh kích thước khác nhau cho kích thước màn hình được hỗ trợ:" Điều đó phụ thuộc. Đối với các hình ảnh có độ tương phản cao nhỏ , ví dụ như các biểu tượng, nên tạo ra ít nhất kích thước nhỏ nhất (để chắc chắn nó sẽ rõ ràng) cộng với kích thước khá lớn (để các phiên bản lớn không bị mờ). Nhưng ngay cả đối với các biểu tượng, bạn có thể cho phép một hình ảnh chia tỷ lệ trên một phạm vi kích thước, với mật độ cao hơn. Đối với ảnh, chỉ cần chỉ định vùng hiển thị mà bạn muốn lấp đầy và dựa vào tỷ lệ của thiết bị.
ToolmakerSteve

286

px - Pixels - điểm trên mỗi tỷ lệ tương ứng với các pixel thực trên màn hình.

i - Inches - dựa trên kích thước vật lý của màn hình.

mm - Millimet - dựa trên kích thước vật lý của màn hình.

pt - Điểm - 1/72 inch dựa trên kích thước vật lý của màn hình.

dp - Pixels độc lập với mật độ - một đơn vị trừu tượng dựa trên mật độ vật lý của màn hình. Các đơn vị này có liên quan đến màn hình 160 dpi, vì vậy một dplà một pixel trên màn hình 160 dpi. Tỷ lệ dp-pixel sẽ thay đổi theo mật độ màn hình, nhưng không nhất thiết phải theo tỷ lệ trực tiếp. Lưu ý: Trình biên dịch chấp nhận cả hai dipdp, mặc dù dpphù hợp hơn với sp.

sp - Pixels độc lập theo tỷ lệ - đây giống như dpđơn vị, nhưng nó cũng được chia tỷ lệ theo sở thích kích thước phông chữ của người dùng. Bạn nên sử dụng đơn vị này khi chỉ định kích thước phông chữ, vì vậy chúng sẽ được điều chỉnh cho cả mật độ màn hình và tùy chọn của người dùng.

Lấy ví dụ về hai màn hình có cùng kích thước nhưng một màn hình có mật độ màn hình 160 dpi (số chấm trên mỗi inch, tức là pixel trên inch) và màn hình kia là 240 dpi.

                          Lower resolution screen     Higher resolution, same size
Physical Width                      1.5 inches                        1.5 inches
Dots Per Inch (“dpi”)               160                               240
Pixels (=width*dpi)                 240                               360
Density (factor of baseline 160)    1.0                               1.5

Density-independent pixels          240                               240
(“dip or dp or dps”)

Scale-independent pixels 
 (“sip or sp”)                  Depends on user font size settings    same

234

Ngoài ra, bạn nên hiểu rõ về các khái niệm sau:

Kích thước màn hình:

Kích thước vật lý thực tế, được đo bằng đường chéo của màn hình. Để đơn giản, Android nhóm tất cả các kích thước màn hình thực tế thành bốn kích thước tổng quát: nhỏ, bình thường, lớn và cực lớn.

Mật độ màn hình:

Số lượng pixel trong một khu vực vật lý của màn hình; thường được gọi là dpi (số chấm trên mỗi inch). Ví dụ: màn hình mật độ "thấp" có ít pixel hơn trong một vùng vật lý nhất định, so với màn hình mật độ "bình thường" hoặc "cao". Để đơn giản, Android nhóm tất cả các mật độ màn hình thực tế thành bốn mật độ tổng quát: thấp, trung bình, cao và cực cao.

Sự định hướng:

Hướng của màn hình theo quan điểm của người dùng. Đây là phong cảnh hoặc dọc, nghĩa là tỷ lệ khung hình của màn hình tương ứng rộng hoặc cao. Xin lưu ý rằng không chỉ các thiết bị khác nhau hoạt động theo các hướng khác nhau theo mặc định, mà hướng có thể thay đổi khi chạy khi người dùng xoay thiết bị.

Nghị quyết:

Tổng số pixel vật lý trên một màn hình. Khi thêm hỗ trợ cho nhiều màn hình, các ứng dụng không hoạt động trực tiếp với độ phân giải; các ứng dụng chỉ nên được quan tâm với kích thước và mật độ màn hình, như được chỉ định bởi các nhóm kích thước và mật độ tổng quát.

Pixel độc lập với mật độ (dp):

Một đơn vị pixel ảo mà bạn nên sử dụng khi xác định bố cục UI, để thể hiện kích thước hoặc vị trí bố cục theo cách không phụ thuộc vào mật độ. Pixel độc lập với mật độ tương đương với một pixel vật lý trên màn hình 160 dpi, đây là mật độ cơ sở được hệ thống giả định cho màn hình mật độ "trung bình". Khi chạy, hệ thống xử lý một cách trong suốt mọi tỷ lệ của các đơn vị dp, khi cần thiết, dựa trên mật độ thực tế của màn hình đang sử dụng. Việc chuyển đổi các đơn vị dp thành pixel màn hình rất đơn giản: px = dp * (dpi / 160). Ví dụ: trên màn hình 240 dpi, 1 dp bằng 1,5 pixel vật lý. Bạn phải luôn sử dụng các đơn vị dp khi xác định giao diện người dùng của ứng dụng để đảm bảo hiển thị đúng giao diện người dùng của bạn trên màn hình với mật độ khác nhau.

Tham khảo: Trang web dành cho nhà phát triển Android


Điều này có nghĩa là bất cứ điều gì bạn thiết kế bằng cách sử dụng các đơn vị dp sẽ luôn chiếm cùng một% màn hình bất kể mật độ pixel của thiết bị? Giả sử tỷ lệ khung hình giống hệt nhau.
DBIT

199

dpdip. Sử dụng nó cho tất cả mọi thứ (lề, đệm, vv).

Chỉ sử dụng spcho {text-size}.


Để có cùng kích thước trên các mật độ màn hình khác nhau, Android sẽ dịch các đơn vị này thành pixel khi chạy, do đó không có phép toán nào khó để bạn làm.


Thấy sự khác biệt giữa px, dpsptrên kích thước màn hình khác nhau.

Nhập mô tả hình ảnh ở đây

Nguồn: Lập trình Android: Hướng dẫn trang trại Big Nerd


144

Tôi đã tính công thức dưới đây để thực hiện chuyển đổi dpisang dpsp nhập mô tả hình ảnh ở đây


10
Nó phải là ppi thay vì dpi
Prateek

142

Định nghĩa

px hoặc dot là một pixel trên màn hình vật lý.

dpi là pixel trên inch trên màn hình vật lý và biểu thị mật độ của màn hình.

Android cung cấp tên bí danh cho một số mật độ

  • ldpi (thấp) ~ 120dpi
  • mdpi (trung bình) ~ 160dpi
  • hdpi (cao) ~ 240dpi
    • hầu hết các thiết bị trong năm 2015 đều ở đây
  • xhdpi (cực cao) ~ 320dpi
    • Apple iPhone 4/5/6, Nexus 4
  • xxhdpi (cực cao) ~ 480dpi
    • Nexus 5
  • xxxhdpi (cực kỳ cực cao) ~ 640dpi

nhúng hoặc dpcác pixel không có mật độ , nghĩa là chúng tương ứng với nhiều hay ít pixel tùy thuộc vào mật độ vật lý.

  • 1dp = 1px trên mdpi

nhập mô tả hình ảnh ở đây

sp hoặc sip là một pixel độc lập tỷ lệ . Chúng được thu nhỏ khi tùy chọn Văn bản lớn được bật trong Settings>Accessibility

  • 1sp = 1dp
  • 1sp = 1,2dp với khả năng truy cập Văn bản lớn

Dùng gì?

Sử dụng sp cho kích thước văn bản.

Sử dụng dp cho mọi thứ khác.


129

Nguồn 1

Nguồn 2

Nguồn 3 : (dữ liệu từ nguồn 3 được đưa ra dưới đây)

Đây là các giá trị kích thước được xác định trong XML. Một thứ nguyên được chỉ định với một số theo sau là một đơn vị đo. Ví dụ: 10px, 2in, 5sp. Các đơn vị đo lường sau được Android hỗ trợ:

dp

Pixels độc lập với mật độ - Một đơn vị trừu tượng dựa trên mật độ vật lý của màn hình. Các đơn vị này có liên quan đến màn hình 160 dpi (số chấm trên mỗi inch), trên đó 1dp gần bằng 1px. Khi chạy trên màn hình mật độ cao hơn, số pixel được sử dụng để vẽ 1dp được tăng lên theo hệ số phù hợp với dpi của màn hình. Tương tự, khi trên màn hình mật độ thấp hơn, số pixel được sử dụng cho 1dp được thu nhỏ lại. Tỷ lệ dp-pixel sẽ thay đổi theo mật độ màn hình, nhưng không nhất thiết phải theo tỷ lệ trực tiếp. Sử dụng các đơn vị dp (thay vì các đơn vị px) là một giải pháp đơn giản để làm cho kích thước chế độ xem trong bố cục của bạn thay đổi kích thước đúng cho các mật độ màn hình khác nhau. Nói cách khác, nó cung cấp tính nhất quán cho kích thước trong thế giới thực của các thành phần UI của bạn trên các thiết bị khác nhau.

sp

Pixels độc lập tỷ lệ - Đây giống như đơn vị dp, nhưng nó cũng được thu nhỏ theo sở thích kích thước phông chữ của người dùng. Bạn nên sử dụng đơn vị này khi chỉ định kích thước phông chữ, vì vậy chúng sẽ được điều chỉnh cho cả mật độ màn hình và tùy chọn của người dùng.

pt

Điểm - 1/72 inch dựa trên kích thước vật lý của màn hình.

px

Pixel - Tương ứng với các pixel thực tế trên màn hình. Đơn vị đo này không được khuyến nghị vì đại diện thực tế có thể khác nhau giữa các thiết bị; mỗi thiết bị có thể có số pixel trên mỗi inch khác nhau và có thể có nhiều hoặc ít hơn tổng số pixel có sẵn trên màn hình.

mm

Millimet - Dựa trên kích thước vật lý của màn hình.

trong

Inch - Dựa trên kích thước vật lý của màn hình.

Lưu ý: Thứ nguyên là một tài nguyên đơn giản được tham chiếu bằng cách sử dụng giá trị được cung cấp trong thuộc tính name (không phải tên của tệp XML). Như vậy, bạn có thể kết hợp các tài nguyên thứ nguyên với các tài nguyên đơn giản khác trong một tệp XML, dưới một thành phần.


9
Ngoài ra: giá trị gia tăng của câu trả lời này là gì? Dường như không có bất cứ điều gì chưa được đề cập trong các câu trả lời khác.
laalto 27/12/13

119

Về cơ bản thời gian duy nhất áp dụng px là một px và đó là nếu bạn muốn chính xác một pixel trên màn hình như trong trường hợp của dải phân cách:

Trên> 160 dpi, bạn có thể nhận được 2-3 pixel,

Trên> 120 dpi, nó làm tròn thành 0.


getDimensionPixel Offerset làm tròn xuống, getDimensionPixelSize làm tròn lên.
Eugen Pechanec

102

px

Pixel - tương ứng với các pixel thực tế trên màn hình.

dp hoặc nhúng

Pixels độc lập với mật độ - một đơn vị trừu tượng dựa trên mật độ vật lý của màn hình. Các đơn vị này có liên quan đến màn hình 160 dpi, vì vậy một dp là một pixel trên màn hình 160 dpi.

Sử dụng dp:

Độc lập mật độ - Ứng dụng của bạn đạt được tính độc lập mật độ của Google khi nó duy trì kích thước vật lý (theo quan điểm của người dùng) của các thành phần giao diện người dùng khi được hiển thị trên màn hình với mật độ khác nhau. (tức là) Hình ảnh phải có cùng kích thước (không được phóng to hoặc thu nhỏ) trong các loại màn hình khác nhau.

sp

Pixels độc lập tỷ lệ - đây giống như đơn vị dp, nhưng nó cũng được thu nhỏ theo sở thích kích thước phông chữ của người dùng.

http://developer.android.com/guide/topics/resource/more-resource.html#Dimension


98

Sử dụng những gì & mối quan hệ giữa px & dp?

Pixel độc lập với mật độ (dp)

Một đơn vị pixel ảo mà bạn nên sử dụng khi xác định bố cục UI, để thể hiện kích thước hoặc vị trí bố cục theo cách không phụ thuộc vào mật độ. Như đã mô tả ở trên, pixel độc lập với mật độ tương đương với một pixel vật lý trên màn hình 160 dpi, đây là mật độ cơ sở được hệ thống giả định cho màn hình mật độ "trung bình". Khi chạy, hệ thống xử lý một cách trong suốt mọi tỷ lệ của các đơn vị dp, khi cần thiết, dựa trên mật độ thực tế của màn hình đang sử dụng. Việc chuyển đổi các đơn vị dp thành pixel màn hình rất đơn giản:

px = dp * (dpi / 160).

Ví dụ: trên màn hình 240 dpi, 1 dp bằng 1,5 pixel vật lý. Bạn phải luôn sử dụng các đơn vị dp khi xác định giao diện người dùng của ứng dụng để đảm bảo hiển thị đúng giao diện người dùng của bạn trên màn hình với mật độ khác nhau.

Hiểu pixel cho dp và ngược lại là rất cần thiết (đặc biệt là đưa ra các giá trị dp chính xác cho nhóm sáng tạo)

dp = px * 160 / dpi

MDPI = 160 dpi || Therefore, on MDPI 1 px = 1 dp
For example, if you want to convert 20 pixel to dp, use the above formula,
dp = 20 * 160 / 160 = 20.
So, 20 pixel = 20 dp.

HDPI = 240 dpi - So, on HDPI 1.5 px = 1 dp
XHDPI = 320 dpi - So, on XHDPI 2 px = 1 dp
XXHDPI = 480 dpi - So, on XXHDPI 3 px = 1 dp

For example, let us consider Nexus 4.
If 24 pixels to be converted to dp and if it is a Nexus 4 screen, developers can
convert it to dp easily by the following calculation :
dp = 24 * 160 / 320 = 12 dp
Screen dimension:
768 x 1280 pixel resolution (320 ppi or 320dpi)
Optional (screen size):
 4.7" diagonal
  • Cố gắng lấy tất cả các giá trị pixel theo số chẵn từ nhóm sáng tạo. Nếu không, độ chính xác sẽ mất trong khi nhân với 0,5.

px

Nó được giải thích ở trên. Cố gắng tránh trong tập tin bố trí. Nhưng có một số trường hợp, trong đó px là bắt buộc. ví dụ: dòng chia ListView. px ở đây tốt hơn khi đưa ra một dòng một pixel làm vạch chia cho tất cả các độ phân giải trên màn hình.

sp

Sử dụng sp cho kích thước phông chữ. Sau đó, chỉ có phông chữ bên trong ứng dụng sẽ thay đổi trong khi kích thước phông chữ của thiết bị thay đổi (nghĩa là Hiển thị -> Phông chữ trên Thiết bị). Nếu bạn muốn giữ một phông chữ có kích thước tĩnh bên trong ứng dụng, bạn có thể cung cấp kích thước phông chữ trong dp. Trong trường hợp như vậy, nó sẽ không bao giờ thay đổi. Các nhà phát triển có thể nhận được yêu cầu như vậy đối với một số màn hình cụ thể, vì điều đó, các nhà phát triển có thể sử dụng dp thay vì sp. Trong tất cả các trường hợp khác, sp được khuyến khích.


90

Bạn có thể thấy sự khác biệt giữa pxdptừ hình ảnh bên dưới, và bạn cũng có thể thấy rằng pxdpkhông thể đảm bảo cùng kích thước vật lý trên các màn hình khác nhau.

nhập mô tả hình ảnh ở đây


3
@EnesBattal, tôi nghĩ bởi vì dp không phải là kích thước vật lý cấp tính, nó là một giá trị gần đúng. Trích dẫn từ CapTech: "dp - Đây là một đơn vị độc lập với mật độ, tuy nhiên kích thước vật lý của một dpiết duy nhất chỉ tương đương nhau trên mỗi mật độ màn hình. Có khoảng 160 đèn dpiêu trong một inch. trên nhóm mật độ của thiết bị, được áp dụng để chuyển đổi dpvvv trên số lượng pixel ở 160 dpi. Số lượng pixel mà một dp trên một bản dịch chuyển sang thay đổi tùy thuộc vào pixel trên mật độ màn hình và mật độ xô của thiết bị rơi vào. "
Zephyr

3
@RuchirBaronia, tôi nghĩ DP hoặc DIP vẫn còn trong apk, bởi vì apk không biết loại mật độ màn hình nào sẽ chạy với nó, vì vậy độc lập thiết bị vẫn nên được giữ.
Zephyr

79

Bất cứ điều gì liên quan đến kích thước của văn bản và sự xuất hiện phải sử dụng sphoặc pt. Trong khi đó, bất cứ điều gì liên quan đến kích thước của các điều khiển, bố cục, vv phải được sử dụng với dp.

Bạn có thể sử dụng cả dpdiptại địa điểm của nó.


69

Tôi sẽ chỉ sử dụng dp.

Có rất nhiều thảo luận về việc sử dụng "sp" cho kích thước phông chữ và trong khi tôi đánh giá cao điểm này, tôi không nghĩ rằng đó là điều đúng đắn theo quan điểm thiết kế. Cuối cùng, bạn có thể phá vỡ thiết kế của mình nếu người dùng có một số lựa chọn kích thước phông chữ và người dùng cuối cùng sẽ đổ lỗi cho ứng dụng chứ không phải lựa chọn cuộc sống của riêng họ.

Ngoài ra, nếu bạn sử dụng ứng dụng sp-font trên máy tính bảng 160 dpi, bạn sẽ thấy mọi thứ đều tăng lên ... nhưng phông chữ của bạn sẽ trông rất nhỏ khi so sánh. Đó không phải là một cái nhìn tốt.

Mặc dù ý tưởng về phông chữ "sp" có một trái tim tốt, nhưng đó là một ý tưởng tồi. Gắn bó với dp cho mọi thứ.


1
Bạn biết rằng yếu tố tỷ lệ phông chữ được áp dụng splà một yếu tố, phải không? Bất cứ điều gì ảnh hưởng dpcũng sẽ ảnh hưởng sp. Điều đó nói rằng, vẫn nên chỉ định kích thước phông chữ bằng cách sử dụng dpthay vì spnếu bố cục của bạn rất chặt chẽ và kích thước lớn hơn sẽ không phù hợp - tốt hơn là có văn bản nhỏ hơn so với những gì người dùng muốn bố cục hoàn toàn lộn xộn. Nhưng trong trường hợp đầu tiên, bạn phải luôn cố gắng tôn trọng sở thích kích thước phông chữ của người dùng - ngay cả cài đặt lớn nhất cũng không lớn.
Karu

67

sp = tỷ lệ pixel độc lập

dp = dip = mật độ pixel độc lập

dpi = số chấm trên mỗi inch

Chúng ta nên tránh sử dụng sp .

Chúng ta nên sử dụng dp để hỗ trợ nhiều màn hình.

Android hỗ trợ các độ phân giải màn hình khác nhau

  • ldpi (thấp) ~ 120 dpi
  • mdpi (trung bình) ~ 160 dpi
  • hdpi (cao) ~ 240 dpi
  • xhdpi (cực cao) ~ 320 dpi
  • xxhdpi (cực cao) ~ 480 dpi
  • xxxhdpi (cực kỳ cực cao) ~ 640 dpi

Một thiết bị 120 dp ldpi có kích thước 120 pixel với kích thước 1 inch.

Tương tự đối với các mật độ khác ...

Chúng tôi là kỹ sư phần mềm nên sử dụng công thức chuyển đổi này:

pixel = dp * (mật độ / 160)

Vì vậy, 1 dp của thiết bị 240 dpi sẽ có = 1 * (240/160) = 3/2 = 1,5 pixel.

Và 1 dp của thiết bị 480 dpi sẽ có = 1 * (480/160) = 3 pixel.

Sử dụng kiến ​​thức 1,5 và 3 pixel này, một kỹ sư phần mềm có thể thiết kế bố cục cho các mật độ khác nhau.

Để kiểm tra thông số màn hình của bất kỳ thiết bị nào:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

Toast.makeText(
    this,
    "4:" + metrics.heightPixels + "," + metrics.density + ","
    + metrics.densityDpi, Toast.LENGTH_LONG).show();

Hướng dẫn rất tốt để hiểu là: http: /vinsol.com/blog/2014/11/20/tips-for-designers-from-a-developer
Kushal

5
"Chúng ta nên tránh sử dụng sp" Tại sao vậy? Bạn nên sử dụng sp khi xử lý kích thước phông chữ vì nó tính đến kích thước văn bản ưa thích của người dùng, developer.android.com/training/multiscreen/screendensities.html
ci_

Tôi đã trả lời liên quan đến phối cảnh bố cục .. Vui lòng đọc trên liên kết bạn đã cung cấp "vì vậy bạn nên sử dụng đơn vị đo lường này khi xác định kích thước văn bản (nhưng không bao giờ cho kích thước bố cục)."
Kushal

Câu hỏi là "Sự khác biệt giữa px, dp, dip và sp trong Android?" câu trả lời của bạn cho biết "Chúng ta nên tránh sử dụng sp". Không có đề cập đến "phối cảnh bố trí" ở bất cứ đâu.
ci_ 20/03/2015

Có .. dp và nhúng giống nhau ... được sử dụng thay thế cho nhau ... Câu trả lời của tôi có giải quyết được câu hỏi của bạn không?
Kushal

61

Sự khác biệt giữa dpspcác đơn vị được đề cập là " tùy chọn kích thước phông chữ của người dùng " bởi các câu trả lời được sao chép từ tài liệu chính thức có thể được nhìn thấy trong thời gian chạy bằng cách thay đổi Settings->Accessibility->Large Texttùy chọn.

Large Texttùy chọn buộc văn bản trở nên 1.3lớn hơn nhiều lần.

private static final float LARGE_FONT_SCALE = 1.3f;

Tất nhiên điều này có thể phụ thuộc vào nhà cung cấp vì nó nằm trong các gói / ứng dụng / Cài đặt .


52

dpi -

  • Dấu chấm trên mỗi inch
  • Đo mật độ điểm ảnh của màn hình.

px - pixel

  • Để ánh xạ pixel màn hình

pt - điểm

  • Khoảng 1/72 inch, liên quan đến kích thước màn hình vật lý.

in - inch - tương ứng với kích thước màn hình vật lý (1 inch = 2,54 cm).

mm- milimét - đối với kích thước màn hình vật lý.

sp - pixel độc lập tỷ lệ.

  • Dựa trên sở thích kích thước phông chữ của người dùng.
  • Phông chữ phải ở dạng 'sp'.

nhúng -

  • nhúng == dp
  • Mật độ pixel độc lập.
  • Nó thay đổi dựa trên Mật độ màn hình.
  • Trong màn hình 160 dpi, 1 dp = 1 pixel.
  • Sử dụng dp ngoại trừ kích thước phông chữ văn bản.

Trong tiêu chuẩn, dp và sp được sử dụng. sp cho kích thước phông chữ và dp cho mọi thứ khác.

Công thức chuyển đổi đơn vị:

px = dp * (dpi / 160);

Density Bucket -> Screen Display => Physical Size        => Pixel Size                   

ldpi         -> 120 dpi          => 0.5 x 0.5 in         => 0.5 in * 120 dpi = 60x60 px   

mdpi         -> 160 dpi          => 0.5 x 0.5 in         => 0.5 in * 160 dpi = 80x80 px   

hdpi         -> 240 dpi          => 0.5 x 0.5 in         => 0.5 in * 240 dpi = 120x120 px  

xhdpi        -> 320 dpi          => 0.5 x 0.5 in         => 0.5 in * 320 dpi = 160x160 px  

xxhdpi       -> 480 dpi          => 0.5 x 0.5 in         => 0.5 in * 480 dpi = 240x240 px 

xxxhdpi      -> 640 dpi          => 0.5 x 0.5 in         => 0.5 in * 640 dpi = 320x320 px  

Theo tài liệu Trình biên dịch chấp nhận cả "nhúng" và "dp", mặc dù "dp" phù hợp hơn với "sp.
Arunendra

46

Đây là công thức được Android sử dụng:

px = dp * (dpi / 160)

Trong đó dpi là một trong những mật độ màn hình sau đây. Đối với một danh sách tất cả các mật độ có thể đi đến đây

Nó định nghĩa các hằng số "DENSITY_ *".

  • ldpi (thấp) ~ 120dpi
  • mdpi (trung bình) ~ 160dpi
  • hdpi (cao) ~ 240dpi
  • xhdpi (cực cao) ~ 320dpi
  • xxhdpi (cực cao) ~ 480dpi
  • xxxhdpi (cực kỳ cực cao) ~ 640dpi

Lấy từ đây .

Điều này sẽ loại bỏ rất nhiều sự nhầm lẫn khi dịch giữa px và dp, nếu bạn biết màn hình dpi của mình.

Vì vậy, giả sử bạn muốn có hình ảnh 60 dp cho màn hình hdpi thì kích thước pixel vật lý là 60 dp là:

px = 60 * (240 / 160)

45

Kích thước màn hình trong Androidđược nhóm thành các loại small, medium, large, extra large, double-extratriple-extra. Mật độ màn hình là lượng pixel trong một khu vực (như inch) của màn hình. Nói chung, nó được đo bằng số chấm trên mỗi inch (dpi). Mật độ màn hình được nhóm thành thấp, trung bình, cao và cực cao. Độ phân giải là tổng số pixel trong màn hình.

  • dp: Mật độ Pixel độc lập, nó thay đổi dựa trên mật độ màn hình. Trong màn hình 160 dpi, 1 dp = 1 pixel. Ngoại trừ kích thước phông chữ, sử dụng dp luôn.
  • nhúng: nhúng == dp. Trong các phiên bản Android trước đó, nhúng đã được sử dụng và sau đó đổi thành dp.
  • sp: Tỷ lệ pixel độc lập, được chia tỷ lệ dựa trên tùy chọn kích thước phông chữ của người dùng. Phông chữ nên sử dụng sp.
  • px: pixel tiêu chuẩn thông thường của chúng tôi sẽ ánh xạ tới pixel màn hình.
  • tính bằng: inch, tương ứng với kích thước màn hình vật lý.
  • mm: milimét, tương ứng với kích thước màn hình vật lý.
  • pt: 1/72 inch, tương ứng với kích thước màn hình vật lý.

Công thức chuyển đổi giữa các đơn vị

 px = dp * (dpi / 160)

dp đến px trong thiết bị

Ví dụ sau có thể giúp hiểu rõ hơn. Việc chia tỷ lệ xảy ra dựa trên kích thước gầu 120 (ldpi), 160 (mdpi), 240 (hdpi), 320 (xhdpi), 480 (xxhdpi) và 640 (xxxhdpi). Tỷ lệ được đề xuất của Google để thiết kế là 3: 4: 6: 8: 12 cho ldpi: mdpi: hdpi: xhdpi: xxhdpi

Một hình ảnh 150px X 150px sẽ chiếm,

  • Không gian màn hình 150 dp X 150 dp tính bằng mdpi
  • Không gian màn hình 100 dp X 100 dp tính bằng hdpi
  • Không gian màn hình 75 dp X 75 dp tính bằng xhdpi

Bạn có thể sử dụng máy tính DPI sau để sửa kích thước hình ảnh của mình và các kích thước khác khi bạn muốn có thiết kế UI thống nhất trong tất cả các thiết bị Android.

Máy tính DPI trong Java

/*
Program output
LDPI: 165.0 X 60.0
MDPI: 220.0 X 80.0
HDPI: 330.0 X 120.0
XHDPI: 440.0 X 160.0
XXHDPI: 660.0 X 240.0
XXXHDPI: 880.0 X 320.0
*/


public class DPICalculator {

private final float LDPI = 120;
private final float MDPI = 160;
private final float HDPI = 240;
private final float XHDPI = 320;
private final float XXHDPI = 480;
private final float XXXHDPI = 640;    

private float forDeviceDensity;
private float width;
private float height;

public DPICalculator(float forDeviceDensity, float width, float height){
    this.forDeviceDensity = forDeviceDensity;
    this.width = width;
    this.height = height;
}

public static void main(String... args) {
    DPICalculator dpiCalculator = new DPICalculator(240,330,120);
    dpiCalculator.calculateDPI();
}


private float getPx(float dp, float value) {
    float px = dp * (value / forDeviceDensity );        
    return px;
}

private void calculateDPI() {

    float ldpiW = getPx(LDPI,width);        
    float ldpiH =  getPx(LDPI,height);
    float mdpiW = getPx(MDPI,width);        
    float mdpiH =  getPx(MDPI,height);        
    float hdpiW = getPx(HDPI,width);        
    float hdpiH =  getPx(HDPI,height);       
    float xdpiW = getPx(XHDPI,width);        
    float xdpiH =  getPx(XHDPI,height);
    float xxdpiW = getPx(XXHDPI,width);        
    float xxdpiH =  getPx(XXHDPI,height);
    float xxxdpiW = getPx(XXXHDPI,width);        
    float xxxdpiH =  getPx(XXXHDPI,height);

    System.out.println("LDPI: " + ldpiW + " X " + ldpiH);
    System.out.println("MDPI: " + mdpiW + " X " + mdpiH);
    System.out.println("HDPI: " + hdpiW + " X " + hdpiH);
    System.out.println("XHDPI: " + xdpiW + " X " + xdpiH);
    System.out.println("XXHDPI: " + xxdpiW + " X " + xxdpiH);
    System.out.println("XXXHDPI: " + xxxdpiW + " X " + xxxdpiH);        
   }
}

Thêm thông tin tham khảo liên kết sau đây.

http://javapapers.com/android/difference-b between-dp-dip-sp-pixel-in-mm-pt-in-android /


45

Xin vui lòng đọc câu trả lời từ wiki cộng đồng. Dưới đây đề cập đến một số thông tin sẽ được xem xét ngoài các câu trả lời ở trên. Hầu hết các nhà phát triển Android bỏ lỡ điều này trong khi phát triển ứng dụng, vì vậy tôi đang thêm những điểm này.

sp = tỷ lệ pixel độc lập

dp = mật độ pixel độc lập

dpi = mật độ pixel

Tôi đã trải qua các câu trả lời trên ... không tìm thấy chúng chính xác. sp cho kích thước văn bản, dp cho giới hạn bố cục - tiêu chuẩn. Nhưng sp cho kích thước văn bản sẽ phá vỡ bố cục nếu sử dụng bất cẩn trong hầu hết các thiết bị.

sp lấy textize của thiết bị, trong khi dp lấy tiêu chuẩn mật độ thiết bị (không bao giờ thay đổi trong thiết bị) Nói văn bản 100sp có thể chiếm 80% màn hình hoặc 100% màn hình tùy thuộc vào kích thước phông chữ được đặt trong thiết bị

nhập mô tả hình ảnh ở đây

Bạn cũng có thể sử dụng sp cho giới hạn bố cục, nó sẽ hoạt động :) Không có ứng dụng tiêu chuẩn nào sử dụng sp cho toàn bộ văn bản

Sử dụng sp và dp cho kích thước văn bản xem xét UX.

  • Không sử dụng sp cho văn bản trên thanh công cụ (có thể sử dụng các độ sáng android có sẵn cho các kích thước màn hình khác nhau với dp)
  • Không sử dụng sp cho văn bản trong các nút giới hạn nhỏ, văn bản rất nhỏ, v.v.

Một số người sử dụng kích thước FONT lớn trong điện thoại của họ để dễ đọc hơn, việc cung cấp cho họ văn bản có kích thước mã hóa nhỏ sẽ là một vấn đề UX. Đặt sp cho văn bản khi cần thiết, nhưng đảm bảo nó sẽ không phá vỡ bố cục khi người dùng thay đổi cài đặt của mình.

Tương tự nếu bạn có một ứng dụng duy nhất hỗ trợ tất cả các kích thước, việc thêm tài sản xxxhdpi sẽ tăng kích thước ứng dụng lên rất nhiều. Nhưng bây giờ điện thoại xxxhdpi là phổ biến vì vậy chúng tôi phải bao gồm các tài sản xxxhdpi ít nhất cho các biểu tượng ở thanh bên, thanh công cụ và thanh dưới cùng. Tốt hơn là di chuyển đến hình ảnh vector để có hình ảnh đồng đều và chất lượng tốt hơn cho tất cả các kích thước màn hình.

Cũng lưu ý rằng mọi người sử dụng phông chữ tùy chỉnh trong điện thoại của họ. Vì vậy, thiếu một phông chữ có thể gây ra vấn đề về khoảng cách và tất cả. Nói kích thước văn bản 12sp cho một phông chữ tùy chỉnh có thể mất thêm một số pixel so với phông chữ mặc định.

Tham khảo trang web dành cho nhà phát triển google để biết thông tin chi tiết và thông tin chi tiết về Android. https://developer.android.com/training/multiscreen/screendensities


43
  • px - một pixel, giống như những gì được sử dụng trong CSS, JavaScript, v.v.
  • sp - pixel độc lập tỷ lệ
  • nhúng - pixel độc lập với mật độ

Thông thường sp được sử dụng cho kích thước phông chữ, trong khi nhúng được sử dụng (còn được gọi là dp) cho người khác.


39

Tôi đã bắt gặp một bài viết hay về thiết kế giao diện người dùng ứng dụng Android cho các độ phân giải màn hình khác nhau và tôi muốn để nó ở đây chỉ cho ai đó tìm kiếm trong khu vực này. Vâng, tôi biết rằng bằng cách nào đó được mô tả trong tài liệu của Google (và được đề cập trong các bài đăng ở trên), tôi đã đọc nó nhưng nó không tốt cho tôi (vâng, tôi có thể quá ngu ngốc)). Tôi vẫn chưa rõ làm thế nào để thiết kế bố cục có khả năng xử lý kích thước màn hình khác nhau. Tôi ghét khái niệm DP, v.v., khi tôi cần triển khai bố cục UI "linh hoạt" cho các màn hình khác nhau. (Này các nhà phát triển iOS - vâng, bạn nói đúng đó là khái niệm Storyboard).

Android không có khái niệm UI xấu, nhưng không có tính năng iOS Storyboard. Thiết kế giao diện người dùng linh hoạt trong Android không phải là điều dễ dàng (tốt nhất).

Dưới đây là bài viết giúp tôi hiểu phải làm gì trong Android để tạo bố cục cho các kích thước màn hình khác nhau:

Blog JMSTUDIO: - Quyết định kích thước màn hình ứng dụng Android

Cách thiết kế giao diện người dùng cho ứng dụng Android cho kích thước màn hình khác nhau

Để thiết kế giao diện người dùng ứng dụng cho các kích thước màn hình khác nhau, thiết kế ban đầu của chúng tôi phải đáp ứng một không gian cần thiết tối thiểu cho mỗi kích thước màn hình. Android xác định kích thước tối thiểu (tính bằng dp) cho từng loại màn hình tổng quát. Dưới đây là hướng dẫn kích thước màn hình Android. Kích thước màn hình tối thiểu cho Android trong dp Khi chúng tôi nhận được kích thước màn hình trong dp, chúng tôi không đủ để thiết kế giao diện người dùng ứng dụng Android. Đối với mỗi kích thước màn hình, chúng ta cần chuẩn bị đồ họa và hình ảnh bitmap cho từng mật độ. Dưới đây là hướng dẫn mật độ màn hình Android. Hướng dẫn về mật độ Android (dpi)

Để tính toán dễ dàng, chúng ta có thể theo tỷ lệ chia tỷ lệ 3: 4: 6: 8 giữa bốn mật độ tổng quát. Nếu chúng ta tạo một hình ảnh 36 × 36 pixel cho thiết bị ldpi, kích thước hình ảnh mật độ còn lại sẽ là 48 × 48 cho mdpi, 72 × 72 cho hdpi và 96 × 96 cho xhdpi.

Cách thiết kế giao diện người dùng ứng dụng Android trong Photoshop

Nhiều nhà thiết kế gặp vấn đề khi thiết kế giao diện người dùng ứng dụng Android trong photoshop hoặc các công cụ thiết kế đồ họa dựa trên pixel khác vì đơn vị độc lập với mật độ, dp. Nhà thiết kế không biết cách ánh xạ dp tới pixel. Google cũng không cung cấp hướng dẫn thiết kế giao diện người dùng Android rõ ràng cho họ, mặc dù họ đưa ra một công thức cơ bản cho dịch dp và pixel.

Theo định nghĩa của Android, 1pd bằng 1px dưới thiết bị 160 dpi (mdpi). Vì vậy, chúng tôi muốn thiết kế một ứng dụng Android cho thiết bị Android xlarge với mật độ mdpi, chúng tôi có thể xác định kích thước UI của mình theo pixel là chiều rộng 960 pixel và chiều cao 720px; Thực hiện theo cùng một quy tắc ánh xạ, chúng ta có thể làm theo hướng dẫn thiết kế giao diện người dùng kích thước màn hình ứng dụng Android:

Kích thước màn hình ứng dụng Android trong Hướng dẫn Pixel

THÊM : Nếu bạn cũng quan tâm đến giao diện người dùng "linh hoạt", hãy xem thư viện này: SDK Android cung cấp đơn vị kích thước mới - sdp (dp có thể mở rộng). Đơn vị kích thước này chia tỷ lệ với kích thước màn hình (điều này cũng được đề cập trong câu trả lời ở đây, về SDPthư viện)

ADDED2 Google cuối cùng đã hiểu được sự hữu ích của khái niệm UI Storeboard iOS và ở đây ConstraintLayoutdành cho thế giới Android: Xây dựng giao diện người dùng đáp ứng với ConstraintLayout


32

1) dp: (density independent pixels)

Số lượng pixel được biểu thị trong một đơn vị dp sẽ tăng khi độ phân giải màn hình tăng (khi bạn có nhiều chấm / pixel trên inch). Ngược lại, trên các thiết bị có độ phân giải thấp hơn, số pixel được biểu thị trên đơn vị dp sẽ giảm. Vì đây là một đơn vị tương đối, nó cần phải có một đường cơ sở để được so sánh với. Đường cơ sở này là màn hình 160 dpi. Đây là phương trình:px = dp * (dpi / 160).


2) sp: (scale independent pixels)

Đơn vị này chia tỷ lệ theo dpi màn hình (tương tự dp) cũng như tùy chọn kích thước phông chữ của người dùng.


3) px: (pixels)

Pixel thực tế hoặc dấu chấm trên màn hình.


Để biết thêm chi tiết bạn có thể truy cập

Hướng dẫn dành cho nhà phát triển Android> Kích thước
Hướng dẫn dành cho nhà phát triển Android> Màn hình


29

Kích thước màn hình trong Android được nhóm thành các loại ldpi, mdpi, hdpi, xhdpi, xxhdpixxxhdpi. Mật độ màn hình là lượng pixel trong một khu vực (như inch) của màn hình. Nói chung, nó được đo bằng số chấm trên mỗi inch ( dpi).

PX(Pixels):

  • pixel tiêu chuẩn thông thường của chúng tôi sẽ ánh xạ tới pixel màn hình. pxcó nghĩa là cho các pixel tuyệt đối. Điều này được sử dụng nếu bạn muốn đưa ra về mặt pixel tuyệt đối cho chiều rộng hoặc chiều cao. Không được khuyến khích.

DP/DIP(Density pixels / Density independent pixels):

  • dip == dp. Trong các phiên bản Android trước đó, nhúng đã được sử dụng và sau đó đổi thành dp. Đây là thay thế của px.

  • Nói chung chúng tôi không bao giờ sử dụng pxvì nó là giá trị tuyệt đối. Nếu bạn sử dụng pxđể đặt chiều rộng hoặc chiều cao và nếu ứng dụng đó đang được tải xuống các thiết bị có kích thước màn hình khác nhau, thì chế độ xem đó sẽ không kéo dài theo kích thước ban đầu của màn hình.

  • dprất khuyến khích sử dụng thay thế px. Sử dụng dpnếu bạn muốn đề cập đến chiều rộng và chiều cao để phát triển & thu nhỏ linh hoạt dựa trên kích thước màn hình.

  • Nếu chúng tôi đưa ra dp/dip, android sẽ tự động tính toán kích thước pixel trên cơ sở màn hình có kích thước 160 pixel.

SP(Scale independent pixels):

  • chia tỷ lệ dựa trên sở thích kích thước phông chữ của người dùng. Phông chữ nên sử dụng sp.

  • khi đề cập đến kích thước phông chữ để phù hợp với các kích cỡ màn hình khác nhau, hãy sử dụng sp. Điều này tương tự như dp.Sử dụng spđặc biệt cho các kích thước phông chữ để tăng và thu nhỏ động dựa trên kích thước màn hình

Tài liệu Android cho biết:

khi chỉ định kích thước, luôn luôn sử dụng một trong hai dphoặc spđơn vị. A dplà một pixel độc lập với mật độ tương ứng với kích thước vật lý của pixel ở mức 160 dpi. An splà cùng một đơn vị cơ sở, nhưng được chia tỷ lệ theo kích thước văn bản ưa thích của người dùng (đó là pixel độc lập với tỷ lệ), vì vậy bạn nên sử dụng đơn vị đo này khi xác định kích thước văn bản


21

Màn hình của điện thoại di động được tạo thành từ hàng ngàn chấm nhỏ được gọi là pixel (px) . Một pixel là yếu tố nhỏ nhất để tạo ra hình ảnh. Số lượng pixel để tạo ảnh hoặc từ ngữ càng nhiều, nó càng trở nên sắc nét hơn và làm cho màn hình điện thoại thông minh dễ đọc hơn.

Độ phân giải màn hình được đo bằng số lượng pixel trên màn hình. Độ phân giải màn hình là thông số kỹ thuật thường được sử dụng khi mua thiết bị, nhưng thực sự không hữu ích khi thiết kế cho Android vì nghĩ màn hình về pixel bỏ qua khái niệm kích thước vật lý, đối với thiết bị cảm ứng thực sự rất quan trọng.

Pixel độc lập mật độ (dp hoặc nhúng) cho phép nhà thiết kế tạo tài sản xuất hiện theo cách mong đợi, bất kể độ phân giải hoặc mật độ của thiết bị đích.

Một pixel độc lập mật độ (dp hoặc nhúng) bằng một pixel ở mật độ cơ sở hoặc 160 dpi (số chấm trên mỗi inch).

1 px / 1dp = 160 dpi / 160 dpi

2 px / 1dp = 320 dpi (2x) / 160 dpi

Ở đâu,

dpi là số chấm trên mỗi inch

Vì vậy, ở 320 dpi, 1 dp bằng 2 px.

Công thức

px / dp = dpi / 160dpi

Số chấm trên mỗi inch (dpi) là thước đo độ sắc nét (nghĩa là mật độ của các điểm được chiếu sáng) trên màn hình hiển thị. Số chấm trên mỗi inch cho độ phân giải hình ảnh nhất định sẽ khác nhau dựa trên kích thước màn hình tổng thể do cùng một số pixel đang được trải ra trên một không gian khác nhau.

Làm việc với các pixel độc lập mật độ giúp chúng tôi xử lý tình huống như bạn có hai thiết bị có cùng độ phân giải pixel, nhưng dung lượng khác nhau. Giả sử trong một trường hợp, một máy tính bảng và điện thoại có cùng độ phân giải pixel 1280 x 800 pixel (160 dpi) và 800 x 1280 pixel (320 dpi).

Bây giờ vì một máy tính bảng có mật độ cơ sở (160 dpi), kích thước pixel độc lập về mật độ và vật lý của nó là như nhau, 1280 x 800. Mặt khác, điện thoại có mật độ pixel cao hơn, do đó, nó có một nửa số pixel độc lập với mật độ như vật lý điểm ảnh. Vì vậy, một chiếc điện thoại có mật độ pixel độc lập 400 x 640. Vì vậy, sử dụng pixel độc lập với mật độ sẽ giúp dễ dàng hình dung rằng máy tính bảng có nhiều không gian hơn điện thoại.

Tương tự, nếu bạn có hai thiết bị có kích thước màn hình tương tự nhau, nhưng mật độ pixel khác nhau, giả sử một thiết bị là 800 x 1280 pixel (320 dpi) và thiết bị kia là 400 x 640 pixel (160 dpi), chúng tôi không cần xác định hoàn toàn bố cục khác nhau cho hai thiết bị này vì chúng tôi có thể đo lường tài sản theo pixel độc lập mật độ, giống nhau cho cả hai thiết bị.

800 x 1280 pixel (320dpi) = 400 x 640 pixel mật độ độc lập (dp)

400 x 640 pixel (160 dpi) = 400 x 640 pixel mật độ độc lập (dp)

Tỷ lệ pixel độc lập (sp) là đơn vị ưa thích cho kích thước phông chữ. Đối với mục đích truy cập, Android cho phép người dùng tùy chỉnh kích thước phông chữ của thiết bị. Người dùng gặp khó khăn khi đọc văn bản có thể tăng kích thước phông chữ của thiết bị. Thông thường bạn có thể tìm thấy tùy chọn này trong cài đặt hiển thị trên điện thoại hoặc máy tính bảng của bạn dưới cỡ chữ. Nó cũng thường có sẵn thông qua các cài đặt trợ năng.

Với các pixel độc lập tỷ lệ, 16 sp hoàn toàn giống với 16 dp khi kích thước phông chữ của thiết bị ở mức bình thường hoặc 100%. Nhưng khi kích thước phông chữ của thiết bị lớn, ví dụ 125%, 16 sp sẽ dịch thành 20 dp hoặc 1,25 lần 16.

Nếu bạn sử dụng dp làm đơn vị cho kích thước phông chữ, thì đoạn văn bản đó có kích thước vật lý cụ thể bất kể người dùng có tùy chỉnh kích thước phông chữ của thiết bị hay không. Sử dụng đơn vị sp sẽ tạo ra trải nghiệm tốt hơn cho những người bị suy giảm thị lực.

Tham khảo : Udacity , Google


19

sp: tỷ lệ pixel độc lập

Bạn nên sử dụng nó với các văn bản vì nó được tự động thu nhỏ theo kích thước phông chữ đang được người dùng sử dụng trong thiết bị của mình.

px: pixel hoặc phần tử hình ảnh là điểm duy nhất trên màn hình


19

Mật độ điểm ảnh

Mật độ pixel màn hình và độ phân giải khác nhau tùy thuộc vào nền tảng. Các pixel độc lập với thiết bị và các pixel có thể mở rộng là các đơn vị cung cấp một cách linh hoạt để phù hợp với thiết kế trên các nền tảng.

Tính mật độ pixel

Số lượng pixel phù hợp với một inch được gọi là mật độ pixel. Màn hình mật độ cao có nhiều pixel trên mỗi inch hơn màn hình mật độ thấp ....

Số lượng pixel phù hợp với một inch được gọi là mật độ pixel. Màn hình mật độ cao có nhiều pixel trên mỗi inch hơn so với màn hình mật độ thấp. Do đó, các thành phần UI có cùng kích thước pixel xuất hiện lớn hơn trên màn hình mật độ thấp và nhỏ hơn trên màn hình mật độ cao.

Để tính mật độ màn hình, bạn có thể sử dụng phương trình này:

Mật độ màn hình = Chiều rộng màn hình (hoặc chiều cao) tính bằng pixel / Chiều rộng màn hình (hoặc chiều cao) tính bằng inch

Mật độ cao so với màn hình mật độ thấp hơn

Mật độ độc lập

Mật độ pixel màn hình và độ phân giải khác nhau tùy thuộc vào nền tảng. Các pixel độc lập với thiết bị và các pixel có thể mở rộng là các đơn vị cung cấp một cách linh hoạt để phù hợp với thiết kế trên các nền tảng.

Tính mật độ pixel Số pixel phù hợp với một inch được gọi là mật độ pixel . Màn hình mật độ cao có nhiều pixel trên mỗi inch hơn màn hình mật độ thấp ....

Mật độ độc lập đề cập đến việc hiển thị thống nhất các thành phần UI trên màn hình với mật độ khác nhau.

Các pixel độc lập với mật độ , được viết là dp (phát âm là dipsv ), là các đơn vị linh hoạt có tỷ lệ để có kích thước đồng đều trên bất kỳ màn hình nào. UI vật liệu sử dụng các pixel độc lập mật độ để hiển thị các yếu tố nhất quán trên màn hình với mật độ khác nhau.

  1. Màn hình mật độ thấp hiển thị với mật độ độc lập
  2. Màn hình mật độ cao được hiển thị với mật độ độc lập

Đọc toàn văn https://m Material.io/design/layout/pixel-d mật.html


16

Pixel (px) - tương ứng với các pixel thực trên màn hình. Điều này được sử dụng nếu bạn muốn đưa ra về mặt pixel tuyệt đối cho chiều rộng hoặc chiều cao.

Pixels độc lập mật độ (dp hoặc nhúng) - một đơn vị trừu tượng dựa trên mật độ vật lý của màn hình. Các đơn vị này có liên quan đến màn hình 160 dpi, vì vậy một dp là một pixel trên màn hình 160 dpi. Tỷ lệ dp-pixel sẽ thay đổi theo mật độ màn hình, nhưng không nhất thiết phải theo tỷ lệ trực tiếp. Lưu ý: Trình biên dịch chấp nhận cả hai trò chơi nhúng nhúng và trò chơi điện tử, mặc dù kiểu này phù hợp hơn với trò chơi điện tử.

Pixels độc lập tỷ lệ (sp) - đây giống như đơn vị dp, nhưng nó cũng được thu nhỏ theo sở thích kích thước phông chữ của người dùng. Bạn nên sử dụng đơn vị này khi chỉ định kích thước phông chữ, vì vậy chúng sẽ được điều chỉnh cho cả mật độ màn hình và tùy chọn của người dùng.

Luôn luôn chỉ sử dụng dp và sp. sp cho kích thước phông chữ và dp cho mọi thứ khác. Nó sẽ làm cho UI tương thích với các thiết bị Android với mật độ khác nhau. Bạn có thể tìm hiểu thêm về pixel và dp từ https://www.google.com.vn/design/spec/layout/units-measurements.html#units-measurements-d mật- indep khu-pixel-dp-

Url nguồn: - http://www.androidtutorialshub.com/what-is-the-difference-b between-pixel-dp-dip-sp-on- android /


15

Tôi muốn cung cấp một cách dễ hiểu dp. Trong thực tế, tôi nghĩ dplà dễ hiểu nhất. dpchỉ là một đơn vị chiều dài vật lý. Nó có cùng kích thước với mmhoặc inch. Nó chỉ thuận tiện cho chúng ta viết 50dp, 60dphơn là 50/160 inchhoặc 60/160 inch, bởi vì người dpta chỉ là 1/160 inchbất kỳ kích thước hoặc độ phân giải màn hình nào.

Vấn đề duy nhất là, dpi android của một số màn hình không chính xác. Ví dụ, một màn hình được phân loại thành 160dpi có thể có 170dpi thực sự. Vì vậy, kết quả tính toán dplà mờ. Nó sẽ được xấp xỉ như 1/160 inch.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.