[Android] "px", "dip", "dp"및 "sp"의 차이점은 무엇입니까?


Answers

이것에 대한 거의 모든 것과 크기와 밀도가 다른 여러 화면에 대한 최상의 지원을 얻는 방법은 여기에 잘 설명되어 있습니다.

화면 크기
화면의 대각선으로 측정 된 실제 물리적 크기입니다. 간단히하기 위해 Android는 모든 실제 화면 크기를 네 가지 일반화 된 크기 (소규모, 보통, 대형 및 초대형)로 그룹화합니다.

스크린 밀도
화면의 물리적 영역 내의 픽셀 수. 일반적으로 dpi (인치당 도트 수)라고합니다. 예를 들어, "저"밀도 화면은 "일반"또는 "고"밀도 화면과 비교하여 주어진 물리적 영역에서 더 적은 픽셀을 갖습니다. 단순함을 위해 Android는 모든 실제 화면 밀도를 저, 중, 고, 초고속, 초고속 및 초고속의 6 가지 일반화 된 밀도로 그룹화합니다.

정위
사용자의 시점에서 화면의 방향. 가로 또는 세로로, 화면의 종횡비가 각각 너비 또는 높이입니다. 다른 장치가 기본적으로 다른 방향으로 작동 할뿐만 아니라 사용자가 장치를 회전 할 때 런타임에 방향이 변경 될 수 있습니다.

해결
화면의 총 물리적 픽셀 수입니다. 여러 화면에 대한 지원을 추가 할 때 응용 프로그램은 해상도로 직접 작동하지 않습니다. 응용 프로그램은 일반화 된 크기 및 밀도 그룹에 지정된대로 화면 크기 및 밀도에만 관심을 가져야합니다.

밀도 독립적 픽셀 (dp)
UI 레이아웃을 정의 할 때, 레이아웃 차원을 표현하거나 밀도 독립적 인 방식으로 위치를 지정할 때 사용해야하는 가상 픽셀 단위입니다. 밀도 비 독립 픽셀은 "중간"밀도 화면에 대해 시스템에서 가정 한 기본 밀도 인 160dpi 화면의 한 물리적 픽셀과 동일합니다. 런타임시 시스템은 사용중인 화면의 실제 밀도를 기반으로 필요에 따라 dp 장치의 크기 조정을 투명하게 처리합니다. dp 단위의 스크린 픽셀로의 변환은 간단합니다 : px = dp * (dpi / 160) . 예를 들어 240 dpi 화면에서 1 dp는 1.5 실제 픽셀과 같습니다. 응용 프로그램의 UI를 정의 할 때는 항상 dp 단위를 사용해야하며, 서로 다른 밀도의 화면에 UI가 제대로 표시되도록해야합니다.

둘 이상의 장치 유형에 대해 Android 앱을 개발하는 데 심각한 문제가있는 경우 화면 지원 개발 문서를 적어도 한 번 읽어야합니다. 또한 특정 화면 구성을 가진 활성 장치의 실제 수를 아는 것은 항상 좋은 방법입니다.

Question

안드로이드 측정 단위의 차이점은 무엇입니까?

  • 픽셀
  • 담그다
  • DP
  • sp



Android에서 사용하는 공식은 다음과 같습니다.

px = dp * (dpi / 160)

여기서 dpi는 다음 화면 밀도 중 하나입니다. 가능한 모든 밀도 목록은 여기를 참조하십시오.

"DENSITY_ *"상수를 정의합니다.

  • ldpi (낮음) ~ 120dpi
  • mdpi (중간) ~ 160dpi
  • hdpi (높음) ~ 240dpi
  • xhdpi (초고속) ~ 320dpi
  • xxhdpi (초고속) ~ 480dpi
  • xxxhdpi (엑스트라 엑스트라 엑스트라 엑스트라 엑스트라 엑스트라 하이) ~ 640dpi

여기 에서 찍은.

이것은 화면 dpi를 안다면 px와 dp 사이에서 번역 할 때 많은 혼란을 해결할 것입니다.

그래서, 당신은 60dp의 물리적 픽셀 크기가 다음 hdpi 화면에 대한 60 dp의 이미지를 원한다고 가정 해 봅시다 :

px = 60 * (240 / 160)



정의

px 또는 점은 실제 화면의 픽셀 입니다.

dpi 는 물리적 화면에서 인치당 픽셀 수이며 디스플레이의 밀도를 나타냅니다.

Android는 여러 밀도에 별명을 부여합니다.

  • ldpi (낮음) ~ 120dpi
  • mdpi (중간) ~ 160dpi
  • hdpi (높음) ~ 240dpi
    • 2015 년 대부분의 기기가 여기에 있습니다.
  • xhdpi (초고속) ~ 320dpi
    • Apple iPhone 4/5/6, Nexus 4
  • xxhdpi (초고속) ~ 480dpi
    • 넥서스 5
  • xxxhdpi (엑스트라 엑스트라 엑스트라 엑스트라 엑스트라 엑스트라 하이) ~ 640dpi

dip 또는 dp밀도가없는 픽셀입니다 . 즉, 물리적 밀도에 따라 픽셀이 더 많거나 적습니다.

  • 1dp = 1 픽셀 (mdpi)

sp 또는 sip규모에 독립적 인 픽셀 입니다. 설정 > 액세스 가능성 에서 큰 텍스트 옵션이 켜지면 크기가 조정됩니다.

  • 1sp = 1dp
  • 액세스 가능성이있는 1sp = 1.2dp 큰 텍스트

무엇을 사용할 것인가?

텍스트 크기에 sp 를 사용하십시오.

다른 모든 것에는 dp 를 사용하십시오.




기본적으로 px가 적용되는 유일한 시간은 하나의 픽셀이며 분할 자의 경우처럼 화면에 정확히 하나의 픽셀이 필요한 경우입니다.

160 dpi 이상에서는 2-3 픽셀을 얻을 수 있지만,

120dpi를 초과하면 0으로 반올림됩니다.




sp = scale independent pixel

dp = density independent pixels

dpi = density pixels

I have gone through the above answers...not finding them exactly correct. sp for text size, dp for layout bounds - standard. But sp for text size will break the layout if used carelessly in most of the devices.

sp take the textsize of the device, whereas dp take that of device density standard( never change in a device) Say 100sp text can occupies 80% of screen or 100% of screen depending on the font size set in device

You can use sp for layout bounds also, it will work :) No standard app use sp for whole text

Use sp and dp for text size considering UX.

  • Dont use sp for text in toolbar( can use android dimens available or dp)
  • Dont use sp for text in small bounded buttons, very smaller text, etc

Some people use huge FONT in their phone for more readability, giving them small hardcoded sized text will be an UX issue. Put sp for text where necessary, but make sure it won't break the layout.




The screen of a mobile phone is made up of thousands of tiny dots known as pixels (px) . A pixel is the smallest element which goes to make the picture. The more the number of pixels to make a picture or wording, the sharper it becomes and makes the smartphone screen more easily readable.

Screen resolution is measured in terms of number of pixels on the screen. Screen resolution is a commonly-used specification when buying a device, but it's actually not that useful when designing for Android because thinking of screens in terms of pixels ignores the notion of physical size, which for a touch device is really really important.

Density independent pixel (dp or dip) allow the designer to create assets that appear in a expected way, no matter the resolution or density of target device.

A density independent pixel (dp or dip) is equal to one pixel at the baseline density or 160 dpi (dots per inch).

1 px/1dp = 160 dpi/160 dpi

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

어디에,

dpi is dots per inch

So, at 320 dpi, 1 dp is equal to 2 px.

Formula

px/dp = dpi/160dpi

Dots per inch (dpi) is a measure of the sharpness (that is, the density of illuminated points) on a display screen. The dots per inch for a given picture resolution will differ based on the overall screen size since the same number of pixels are being spread out over a different space.

Working with density independent pixels help us to deal with a situation like where you have two devices with same pixel resolution, but differing amount of space. Suppose in a case, a tablet and phone has the same pixel resolution 1280 by 800 pixels (160 dpi) and 800 by 1280 pixels (320 dpi) respectively.

Now because a tablet is at baseline density (160 dpi) its physical and density independent pixels sizes are the same, 1280 by 800. The phone on the other hand has a higher pixel density, so it has half as many density independent pixels as physical pixels. So a phone has 400 by 640 density independent pixels. So using a density-independent pixel makes it easier to mentally picture that tablet has much more space than the phone.

Similarly, if you have two devices with similar screen size, but different pixel density, say one is 800 by 1280 pixels (320 dpi), and the other is 400 by 640 pixels (160 dpi), we don't need to define totally different layouts for these two devices as we can measure assets in terms of density independent pixel which is same for both devices.

800 by 1280 pixels (320dpi)=400 by 640 density independent pixel (dp)

400 by 640 pixels (160 dpi)=400 by 640 density independent pixel (dp)

Scale independent pixels(sp) is the preferred unit for font size. For accessibility purposes, Android allows users to customize their device's font size. Users that have trouble reading text can increase their device's font size. You can normally find this option in the display setting on your phone or tablet under font size. It's often also available through the accessibility settings.

With scale independent pixels, 16 sp is exactly the same as 16 dp when the device's font size is normal or 100%. But when device's font size is large, for example 125%, 16 sp will translate to 20 dp or 1.25 times 16.

If you use dp as the unit for font size, then that piece of text has a specific physical size no matter if the user has customize device's font size. Using sp units will make a better experience for people with impaired eyesight.

Reference : Udacity , Google




SDP - a scalable size unit - basically it is not a unit, but dimension resources for different screen size.

Try the sdp library from Intuit. It's very handy to solve unit problems, and you can quickly support multiple screens .

용법

android:paddingBottom="@dimen/_15sdp" for positive and android:layout_marginTop="@dimen/_minus10sdp" for negative sdp sdp

It has equivalent value in dp for each size in values-sw<N>dp folders (sw = smallestWidth).

Attention

Use it carefully! In most cases you still need to design a different layout for tablets.

<LinearLayout
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_marginTop="@dimen/_minus10sdp"
          android:paddingBottom="@dimen/_15sdp"
          android:orientation="horizontal" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:includeFontPadding="false"
                    android:text="♡"
                    android:textColor="#ED6C27"
                    android:textSize="@dimen/_70sdp"
                    android:textStyle="bold" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:includeFontPadding="false"
                    android:text="U"
                    android:textColor="@android:color/black"
                    android:textSize="@dimen/_70sdp" />
            </LinearLayout>

You can use db for text size, but I prefer ssp for text size.

For more details, check the library GitHub page .




dpi -

  • 1 인치당 도트 수
  • 화면의 픽셀 밀도를 측정합니다.

픽셀 - 픽셀

  • 화면 픽셀 매핑

포인트 - 포인트

  • 실제 화면 크기와 관련하여 약 1/72 인치입니다.

in-inch) - 물리적 화면 크기 (1 인치 = 2.54cm)를 기준으로합니다.

mm - 밀리미터 - 실제 화면 크기와 관련.

sp - 규모 독립적 픽셀.

  • 사용자의 글꼴 크기 환경 설정을 기반으로합니다.
  • 글꼴은 'sp'에 있어야합니다.

딥 -

  • dip == dp
  • 밀도 독립 픽셀.
  • 화면 밀도에 따라 다릅니다.
  • 160 dpi 화면에서 1 dp = 1 픽셀.
  • 텍스트 글꼴 크기를 제외하고 dp를 사용하십시오.

표준에서는 dp와 sp가 사용됩니다. sp는 글꼴 크기를, dp는 다른 모든 글꼴을 나타냅니다.

단위 변환 공식 :

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  



Settings->Accessibility->Large Text 옵션을 변경하여 런타임시 공식 문서에서 답변에 의해 " 사용자의 글꼴 크기 환경 설정 "으로 언급 된 dpsp 단위의 차이를 볼 수 있습니다.

Large Text 옵션은 텍스트가 1.3 배 커지게 만듭니다.

private static final float LARGE_FONT_SCALE = 1.3f;

이것은 packages/apps/Settings 에 있기 때문에 물론 공급 업체에 따라 달라질 수 있습니다.




Before answering this question let me decrease the number of units first. So here you go: dp or dip are both the same and are known as Density-independent pixels .

1. px - stands for pixels. Pixels are a single dot, point on a screen. Generally in the mobile industry it is measured in ppi (pixels per inch). Screen resolution is directly proportional to ppi, the larger the number of pixels per inch the higher the screen resolution.

For example, if you draw an image of a size 200 px * 200 px , then its appearance must be different on a high-resolution device versus a low-resolution device. The reason is a 200 px image on a low-resolution phone will be look larger than on a high-resolution device.

Below images are showing a resolution of the same image on different phones -

  • Phone with High screen resolution

  • Phone with Low screen resolution

2. dip or dp - an abstract unit that is based on the physical density of the screen. These units are relative to a 160 dpi screen, so one dp is one pixel on a 160 dpi screen. The ratio of dp-to-pixel will change with the screen density, but not necessarily in direct proportion. "Density independence" refers to the uniform display of UI elements on screens with different densities.

  • Image which is showing 80px (left side image) and 80 dp (right-side image) . Checkout difference.

A dp is equal to one physical pixel on a screen with a density of 160 . To calculate dp:

dp = (width in pixels * 160) / screen density

3. sp - stands for scalable pixels. Generally sp is used for texts on the UI, and sp preserves the font settings. For example, if a user selected a larger font than 30 sp it will auto scale to appear large according to a user preference.




Screen size in Android is grouped into categories ldpi , mdpi , hdpi , xhdpi , xxhdpi and xxxhdpi . Screen density is the amount of pixels within an area (like inch) of the screen. Generally it is measured in dots-per-inch ( dpi ).

PX(Pixels):

  • our usual standard pixel which maps to the screen pixel. px is meant for absolute pixels. This is used if you want to give in terms of absolute pixels for width or height. Not recommended.

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

  • dip == dp . In earlier Android versions dip was used and later changed to dp . This is alternative of px .

  • Generally we never use px because it is absolute value. If you use px to set width or height, and if that application is being downloaded into different screen sized devices, then that view will not stretch as per the screen original size.

  • dp is highly recommended to use in place of px . Use dp if you want to mention width and height to grow & shrink dynamically based on screen sizes.

  • if we give dp/dip , android will automatically calculate the pixel size on the basis of 160 pixel sized screen.

SP(Scale independent pixels):

  • scaled based on user's font size preference. Fonts should use sp .

  • when mentioning the font sizes to fit for various screen sizes, use sp . This is similar to dp .Use sp especially for font sizes to grow & shrink dynamically based on screen sizes

Android Documentation says:

when specifying dimensions, always use either dp or sp units. A dp is a density-independent pixel that corresponds to the physical size of a pixel at 160 dpi . An sp is the same base unit, but is scaled by the user's preferred text size (it's a scale-independent pixel), so you should use this measurement unit when defining text size




px와 dp의 관계 & 관계

밀도 독립적 픽셀 (dp)

UI 레이아웃을 정의 할 때, 레이아웃 차원을 표현하거나 밀도 독립적 인 방식으로 위치를 지정할 때 사용해야하는 가상 픽셀 단위입니다. 전술 한 바와 같이, 밀도 - 독립 픽셀은 "중간"밀도 스크린에 대해 시스템에 의해 가정 된베이스 라인 밀도 인 160dpi 스크린상의 하나의 물리적 픽셀과 동일하다. 런타임시 시스템은 사용중인 화면의 실제 밀도를 기반으로 필요에 따라 dp 장치의 크기 조정을 투명하게 처리합니다. dp 단위의 화면 픽셀로의 변환은 간단합니다.

px = dp * (dpi / 160).

예를 들어 240 dpi 화면에서 1 dp는 1.5 실제 픽셀과 같습니다. 응용 프로그램의 UI를 정의 할 때는 항상 dp 단위를 사용해야하며, 서로 다른 밀도의 화면에 UI가 제대로 표시되도록해야합니다.

픽셀을 dp로 또는 그 반대로 이해하는 것은 매우 중요합니다 (특히 크리에이티브 팀에 정확한 dp 값을 제공 할 때)

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
  • 크리에이티브 팀에서 짝수의 모든 픽셀 값을 가져 오십시오. 그렇지 않으면 0.5를 곱하는 동안 정밀도가 손실됩니다.

픽셀

위에 설명되어 있습니다. 레이아웃 파일을 사용하지 마십시오. 그러나 px가 필요한 몇 가지 경우가 있습니다. 예 : ListView 구분선. px는 모든 화면 해상도의 구분선으로 1 픽셀 선을 제공하는 데 더 좋습니다.

sp

글꼴 크기에 sp를 사용하십시오. 그러면 장치 글꼴 크기가 변경되는 동안 응용 프로그램 내의 글꼴 만 변경됩니다 (즉, 표시 -> 글꼴 - 장치). 정적 크기의 글꼴을 응용 프로그램 내에 보관하려면 dp에서 글꼴 크기를 지정하면됩니다. 이 경우 결코 바뀌지 않을 것입니다. 개발자는 특정 화면에 대한 요구 사항을 얻을 수 있습니다. 개발자는 sp 대신 dp를 사용할 수 있습니다. 다른 모든 경우에는 sp가 권장됩니다.




px 픽셀 - 눈 금당 점은 화면의 실제 픽셀에 해당합니다.

Inches - 화면의 실제 크기를 기반으로합니다.

mm 밀리미터 - 화면의 실제 크기를 기반으로합니다.

pt 포인트 - 화면의 물리적 크기에 따라 1/72 인치입니다.

dp 밀도 독립 픽셀 - 화면의 물리적 밀도를 기반으로하는 추상 단위입니다. 이 단위는 160 dpi 화면과 관련이 있으므로 한 dp 는 160 dpi 화면에서 한 픽셀입니다. dp 대 픽셀의 비율은 화면 밀도에 따라 변경되지만 반드시 비율에 따라 달라질 수는 없습니다. 참고 : 컴파일러는 dipdp 모두 허용하지만 dpsp 와 더 일관성이 있습니다.

sp - 스케일 독립적 인 픽셀 - 이것은 dp 단위와 비슷하지만 사용자의 글꼴 크기 기본 설정에 따라 조정됩니다. 글꼴 크기를 지정할 때이 장치를 사용하는 것이 좋으므로 화면 밀도와 사용자 기본 설정 모두에 맞게 조정됩니다.

같은 크기이지만 화면 밀도가 160dpi (인치당 도트 수, 즉 인치당 픽셀 수)이고 다른 크기는 240dpi 인 두 개의 스크린을 예로 들어 보겠습니다.

                          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



텍스트 및 모양의 크기와 관련된 모든 것은 sp 또는 pt 사용해야합니다. 반면 컨트롤의 크기, 레이아웃 등과 관련된 것은 dp 와 함께 사용해야합니다.

그 자리에서 dpdip 을 모두 사용할 수 있습니다.




dpdip 입니다. 모든 것을 위해 사용하십시오 (마진, 패딩 등).

{text-size}에만 sp 를 사용하십시오.

다른 화면 밀도에서 동일한 크기를 얻으려면 Android는 런타임시 이러한 단위를 픽셀로 변환하므로 까다로운 계산이 필요하지 않습니다.

다양한 화면 크기에서 px , dpsp 의 차이점을 참조하십시오.

출처 : Android 프로그래밍 : The Big Nerd Ranch Guide




Links