Android 측정 단위의 차이점은 무엇입니까?
- px
- 담그다
- dp
- sp
Android 측정 단위의 차이점은 무엇입니까?
답변:
로부터 안드로이드 개발자 설명서 :
픽셀
픽셀 -화면의 실제 픽셀에 해당합니다.
에
인치 - 스크린의 물리적 크기에 기반.
1 인치 = 2.54 센티미터
mm
밀리미터 -화면의 실제 크기를 기준으로합니다.
pt
포인트 -화면의 실제 크기를 기준으로 1/72 인치.
dp 또는 딥
밀도 -독립 픽셀-화면의 물리적 밀도를 기반으로하는 추상 단위입니다. 이 단위는 160dpi 화면을 기준으로하므로 160dpi 화면에서 1dp는 1 픽셀입니다. dp 대 픽셀의 비율은 화면 밀도에 따라 변경되지만 반드시 직접 비율로 변경되는 것은 아닙니다. 참고 : "dp"는 "sp"와 더 일관성이 있지만 컴파일러는 "dip"및 "dp"를 모두 허용합니다.
SP
스케일 이것은 dp 단위와 같다, 그러나 그것은 또한 사용자의 글꼴 크기를 기본 설정으로 조정됩니다 - 픽셀에 무관. 글꼴 크기를 지정할 때이 단위를 사용하는 것이 좋으므로 화면 밀도와 사용자 기본 설정 모두에 맞게 조정됩니다.
에서 이해 밀도 독립에 안드로이드 :
+----------------+----------------+---------------+-------------------------------+
| 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 | | | |
+---------+-------------+---------------+-------------+--------------------+
자세한 내용은 Google 디자인 설명서 에서 확인할 수 있습니다 .
dp
는 실제 동일한 길이를 가지고 있지 않습니다 . (가까이 있지만) 버킷에 대한 @Fraggle의 의견을 참조하십시오. 이것이 의미하는 것은 48dp는 대략 8mm (0.3 인치)이지만 최대 11mm까지 다양 할 수 있습니다.
이것에 대한 거의 모든 것과 크기와 밀도가 다른 여러 화면을 가장 잘 지원하는 방법은 여기에 잘 문서화되어 있습니다.
화면 크기
실제 물리적 크기이며 화면의 대각선으로 측정됩니다. 간단하게하기 위해 Android는 모든 실제 화면 크기를 소형, 보통, 대형 및 초대형의 네 가지 일반 크기로 그룹화합니다.화면 밀도 화면
의 물리적 영역 내 픽셀 수입니다. 일반적으로 dpi (인치당 도트 수)라고합니다. 예를 들어, "낮은"밀도 화면은 "일반"또는 "높은"밀도 화면과 비교하여 지정된 물리적 영역 내에서 더 적은 픽셀을 갖습니다. 간단하게하기 위해 Android는 모든 실제 화면 밀도를 6 가지 일반 밀도 (낮음, 중간, 높음, 매우 높음, 매우 높음, 매우 높음)로 분류합니다.방향
사용자 관점에서 화면의 방향입니다. 이것은 가로 또는 세로이며, 화면의 가로 세로 비율이 각각 넓거나 길다는 것을 의미합니다. 기본적으로 다른 장치는 다른 방향으로 작동 할뿐만 아니라 사용자가 장치를 회전 할 때 런타임에 방향이 변경 될 수 있습니다.해상도 화면
의 총 실제 픽셀 수입니다. 여러 화면에 대한 지원을 추가 할 때 응용 프로그램은 해상도와 직접 작동하지 않습니다. 응용 프로그램은 일반화 된 크기 및 밀도 그룹으로 지정된 화면 크기 및 밀도에만 관심을 가져야합니다.밀도 독립 픽셀 (dp)
UI 레이아웃을 정의 할 때 레이아웃 크기 나 위치를 밀도 독립적 인 방식으로 표현할 때 사용해야하는 가상 픽셀 단위입니다. 밀도 독립적 인 픽셀은 160dpi 화면에서 하나의 물리적 픽셀과 같습니다. 이는 "중간"밀도 화면에 대해 시스템에서 가정 한 기준 밀도입니다. 런타임시 시스템은 사용중인 화면의 실제 밀도에 따라 필요한 경우 dp 단위의 모든 스케일링을 투명하게 처리합니다. dp 단위를 화면 픽셀로 변환하는 것은 간단px = dp * (dpi / 160)
합니다. 예를 들어 240dpi 화면에서 1dp는 1.5 물리적 픽셀과 같습니다. 밀도가 다른 화면에 UI를 올바르게 표시하려면 응용 프로그램의 UI를 정의 할 때 항상 dp 단위를 사용해야합니다.
여러 유형의 장치를위한 Android 앱 개발에 대해 진지한 경우 화면 지원 개발 문서를 한 번 이상 읽었어야합니다. 또한 특정 화면 구성을 가진 실제 장치 수를 항상 아는 것이 좋습니다.
dp가 px로 정확하게 변환하는 방법에 대해 자세히 설명하겠습니다.
150 x 150 px
이미지는 150 * 150 dp
화면 공간을 차지합니다 .150 x 150 px
이미지는 100 * 100 dp
화면 공간을 차지합니다 .150x150 px
이미지는 75 * 75 dp
화면 공간을 차지합니다 .다른 방법 : 예를 들어 응용 프로그램에 이미지를 추가하고 100 * 100 dp
컨트롤 을 채우려면 이미지가 필요합니다 . 지원되는 화면 크기를 위해 다른 크기의 이미지를 만들어야합니다.
100 * 100 px
mdpi 용 이미지150 * 150 px
hdpi 용 이미지200 * 200 px
xhdpi 용 이미지px-픽셀 -스케일 당 포인트는 화면의 실제 픽셀에 해당합니다.
i-인치 -화면의 실제 크기를 기준으로합니다.
mm-밀리미터 -화면의 실제 크기를 기준으로합니다.
pt-포인트 -화면의 실제 크기를 기준으로 1/72 인치.
dp-밀도 독립적 픽셀 -화면의 물리적 밀도를 기반으로하는 추상 단위입니다. 이 단위는 160dpi 화면을 기준으로하므로 160dpi 화면에서 dp
1 픽셀입니다. dp 대 픽셀의 비율은 화면 밀도에 따라 변경되지만 반드시 직접 비율로 변경되는 것은 아닙니다. 참고 : 컴파일러는 모두를 수용 dip
하고 dp
있지만, dp
더 일치한다 sp
.
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
또한 다음 개념에 대한 명확한 이해가 있어야합니다.
화면 크기:
실제 물리적 크기로 화면의 대각선으로 측정됩니다. 간단하게하기 위해 Android는 모든 실제 화면 크기를 소형, 보통, 대형 및 초대형의 네 가지 일반 크기로 그룹화합니다.
화면 밀도 :
화면의 물리적 영역 내 픽셀 수. 일반적으로 dpi (인치당 도트 수)라고합니다. 예를 들어, "낮은"밀도 화면은 "일반"또는 "높은"밀도 화면과 비교하여 지정된 물리적 영역 내에서 더 적은 픽셀을 갖습니다. 간단하게하기 위해 Android는 모든 실제 화면 밀도를 낮음, 중간, 높음 및 매우 높음의 네 가지 일반 밀도로 그룹화합니다.
정위:
사용자의 관점에서 화면의 방향. 이것은 가로 또는 세로이며, 화면의 가로 세로 비율이 각각 넓거나 길다는 것을 의미합니다. 기본적으로 다른 장치는 다른 방향으로 작동 할뿐만 아니라 사용자가 장치를 회전 할 때 런타임에 방향이 변경 될 수 있습니다.
해결:
화면의 총 실제 픽셀 수입니다. 여러 화면에 대한 지원을 추가 할 때 응용 프로그램은 해상도와 직접 작동하지 않습니다. 응용 프로그램은 일반화 된 크기 및 밀도 그룹으로 지정된 화면 크기 및 밀도에만 관심을 가져야합니다.
밀도 독립적 픽셀 (dp) :
UI 레이아웃을 정의 할 때 레이아웃 크기를 나타내거나 밀도 독립적 인 방식으로 위치를 지정하는 데 사용해야하는 가상 픽셀 단위입니다. 밀도 독립적 인 픽셀은 160dpi 화면에서 하나의 물리적 픽셀과 같습니다. 이는 "중간"밀도 화면에 대해 시스템에서 가정 한 기준 밀도입니다. 런타임시 시스템은 사용중인 화면의 실제 밀도에 따라 필요한 경우 dp 단위의 모든 스케일링을 투명하게 처리합니다. dp 단위를 화면 픽셀로 변환하는 것은 간단합니다 : px = dp * (dpi / 160). 예를 들어 240dpi 화면에서 1dp는 1.5 물리적 픽셀과 같습니다. 애플리케이션의 UI를 정의 할 때 밀도가 다른 화면에 UI를 올바르게 표시하려면 항상 dp 단위를 사용해야합니다.
참조 : Android 개발자 사이트
dp
입니다 dip
. 여백, 패딩 등 모든 것에 사용하십시오.
sp
{text-size}에만 사용하십시오 .
사이의 차이를 참조하십시오 px
, dp
그리고 sp
다른 화면 크기에있다.
px 또는 dot은 실제 화면 의 픽셀 입니다.
dpi 는 실제 화면에서 인치당 픽셀 수이며 디스플레이의 밀도를 나타냅니다.
안드로이드는 여러 밀도에 별칭 이름을 제공합니다
딥 또는 dp 는 밀도와 무관 한 픽셀 이며, 즉 물리적 밀도에 따라 더 많거나 적은 픽셀에 해당합니다.
sp 또는 sip 는 크기 독립적 인 픽셀 입니다. 큰 텍스트 옵션이 켜져 있을 때 크기가 조정됩니다. Settings>Accessibility
텍스트 크기에 sp 를 사용하십시오 .
다른 모든 것에는 dp 를 사용하십시오 .
소스 3 : (소스 3의 데이터는 다음과 같습니다)
이들은 XML로 정의 된 차원 값입니다. 차원은 숫자와 측정 단위로 지정됩니다. 예를 들어 10px, 2in, 5sp입니다. 다음 측정 단위는 Android에서 지원됩니다.
dp
밀도 독립적 픽셀-화면의 물리적 밀도를 기반으로하는 추상 단위입니다. 이 단위는 160dpi (dots per inch) 화면과 관련이 있으며 1dp는 대략 1px입니다. 더 높은 밀도의 화면에서 실행하는 경우 1dp를 그리는 데 사용되는 픽셀 수는 화면의 dpi에 적합한 비율로 확대됩니다. 마찬가지로, 저밀도 화면에서는 1dp에 사용되는 픽셀 수가 축소됩니다. dp 대 픽셀의 비율은 화면 밀도에 따라 변경되지만 반드시 직접 비율로 변경되지는 않습니다. px 단위 대신 dp 단위를 사용하면 레이아웃의 뷰 크기를 다른 화면 밀도에 맞게 적절하게 크기를 조정할 수 있습니다. 다시 말해, 다양한 장치에서 실제 UI 요소 크기에 일관성을 제공합니다.
sp
스케일 독립 픽셀-이것은 dp 단위와 비슷하지만 사용자의 글꼴 크기 환경 설정에 따라 스케일됩니다. 글꼴 크기를 지정할 때이 단위를 사용하는 것이 좋으므로 화면 밀도와 사용자 기본 설정 모두에 맞게 조정됩니다.
pt
포인트-화면의 실제 크기를 기준으로 1/72 인치.
px
픽셀-화면의 실제 픽셀에 해당합니다. 실제 측정 값은 장치마다 다를 수 있으므로이 측정 단위는 권장하지 않습니다. 각 장치는 인치당 다른 수의 픽셀을 가질 수 있으며 화면에서 사용 가능한 총 픽셀 수를 더 많거나 적을 수 있습니다.
mm
밀리미터-화면의 실제 크기를 기준으로합니다.
에
인치-화면의 실제 크기를 기준으로합니다.
참고 : 차원은 XML 파일 이름이 아닌 name 속성에 제공된 값을 사용하여 참조되는 간단한 리소스입니다. 따라서 하나의 요소 아래에서 하나의 XML 파일에서 차원 리소스를 다른 간단한 리소스와 결합 할 수 있습니다.
기본적으로 px가 적용되는 유일한 시간은 1px이며, 디바이더의 경우처럼 화면에서 정확히 하나의 픽셀을 원할 때입니다.
> 160dpi에서 2-3 픽셀을 얻을 수 있습니다.
> 120dpi에서는 0으로 반올림됩니다.
px
픽셀-화면의 실제 픽셀에 해당합니다.
dp 또는 딥
밀도 독립적 픽셀-화면의 물리적 밀도를 기반으로하는 추상 단위입니다. 이 단위는 160dpi 화면을 기준으로하므로 160dpi 화면에서 1dp는 1 픽셀입니다.
dp 사용 :
밀도 독립성 -응용 프로그램은 밀도가 다른 화면에 표시 될 때 사용자 인터페이스 요소의 물리적 크기 (사용자 관점에서)를 보존 할 때 "밀도 독립성"을 달성합니다. (예 : 이미지는 다른 유형의 화면에서 동일한 크기 (확대 또는 축소되지 않음)로 보여야합니다.
sp
스케일 독립 픽셀-이것은 dp 단위와 비슷하지만 사용자의 글꼴 크기 환경 설정에 따라 스케일됩니다.
http://developer.android.com/guide/topics/resources/more-resources.html#Dimension
UI 레이아웃을 정의 할 때 레이아웃 크기를 나타내거나 밀도 독립적 인 방식으로 위치를 지정하는 데 사용해야하는 가상 픽셀 단위입니다. 전술 한 바와 같이, 밀도-비 의존적 픽셀은 160dpi 스크린상의 하나의 물리적 픽셀과 동등하며, 이는 "중간"밀도 스크린에 대해 시스템에 의해 가정 된 기준 밀도이다. 런타임시 시스템은 사용중인 화면의 실제 밀도에 따라 필요한 경우 dp 단위의 모든 스케일링을 투명하게 처리합니다. dp 단위를 화면 픽셀로 변환하는 것은 간단합니다.
px = dp * (dpi / 160).
예를 들어 240dpi 화면에서 1dp는 1.5 물리적 픽셀과 같습니다. 애플리케이션의 UI를 정의 할 때 밀도가 다른 화면에 UI를 올바르게 표시하려면 항상 dp 단위를 사용해야합니다.
픽셀을 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
위에서 설명했다. 레이아웃 파일을 피하십시오. 그러나 px가 필요한 경우가 있습니다. 예를 들어 ListView 구분선이 있습니다. px는 전체 화면 해상도에 대해 하나의 픽셀 라인을 구분자로 제공하는 데 더 좋습니다.
글꼴 크기에 sp를 사용하십시오. 그런 다음 장치 글꼴 크기가 변경되는 동안 응용 프로그램 내부의 글꼴 만 변경됩니다 (즉, 디스플레이-> 장치의 글꼴). 앱 안에 정적 크기의 글꼴을 유지하려면 글꼴 크기를 dp로 지정할 수 있습니다. 이런 경우에는 절대 바뀌지 않습니다. 개발자는 특정 화면에 대해 이러한 요구 사항을 충족 할 수 있습니다. 개발자는 sp 대신 dp를 사용할 수 있습니다. 다른 모든 경우에는 sp가 권장됩니다.
당신은 차이 볼 수 있습니다 px
그리고 dp
아래 그림에서, 그리고 당신은 또한 찾을 수 px
및 dp
다른 화면에 동일한 물리적 크기를 보장 할 수 있습니다.
텍스트와 외관해야 사용의 크기와 관련이 아무것도 sp
나 pt
. 반면 컨트롤의 크기, 레이아웃 등과 관련된 모든 것은와 함께 사용해야합니다 dp
.
dp
그리고 dip
그 장소에서 모두 사용할 수 있습니다 .
dp 만 사용합니다.
글꼴 크기에 "sp"를 사용하는 것에 대해 많은 이야기가 있으며, 요점을 알고 있지만 디자인 관점에서 옳은 것이라고 생각하지 않습니다. 사용자가 이상한 글꼴 크기를 선택하면 디자인을 깨뜨릴 수 있으며 사용자는 자신의 삶의 선택이 아닌 앱 을 비난 하게됩니다 .
또한 160dpi 태블릿에서 sp-font 앱을 사용하면 모든 크기가 커지는 것을 알 수 있지만 글꼴은 작게 보입니다. 보기에는 좋지 않습니다.
"sp"글꼴에 대한 아이디어는 마음이 좋지만 아이디어는 좋지 않습니다. 모든 것을 위해 dp를 고수하십시오.
sp
있습니까? 영향 dp
을받는 모든 항목 에도 영향을 미칩니다 sp
. 즉, 레이아웃이 매우 빡빡하고 더 큰 크기가 맞지 않는 경우 dp
대신 글꼴 크기를 지정하는 것이 sp
좋습니다. 사용자가 완전히 엉망인 레이아웃보다 원하는 텍스트를 작게 만드는 것이 좋습니다. 그러나 첫 번째 경우에는 항상 사용자의 글꼴 크기 환경 설정을 존중하기 위해 노력해야합니다. 가장 큰 설정조차 그렇게 크지 않습니다.
sp = 스케일 독립 픽셀
dp = 딥 = 밀도 독립 픽셀
dpi = 인치당 도트
sp 를 사용하지 않아야합니다 .
dp 를 사용 하여 여러 화면을 지원 해야합니다 .
안드로이드는 다양한 화면 해상도를 지원합니다
120dp ldpi 장치에는 1 인치 크기의 120 픽셀이 있습니다.
다른 밀도에서도 마찬가지입니다.
소프트웨어 엔지니어는 다음과 같은 변환 공식을 사용해야합니다.
픽셀 = dp * (밀도 / 160)
따라서 240dpi 장치의 1dp는 = 1 * (240/160) = 3/2 = 1.5 픽셀입니다.
그리고 480 dpi 장치의 1 dp는 1 * (480/160) = 3 픽셀입니다.
이 1.5 및 3 픽셀 지식을 사용하여 소프트웨어 엔지니어는 다양한 밀도에 대한 레이아웃을 설계 할 수 있습니다.
모든 장치의 화면 매개 변수를 확인하려면
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
Toast.makeText(
this,
"4:" + metrics.heightPixels + "," + metrics.density + ","
+ metrics.densityDpi, Toast.LENGTH_LONG).show();
공식 문서에서 복사 한 답변에 따라 " 사용자의 글꼴 크기 기본 설정 "으로 언급 된 단위 dp
와의 차이점은 옵션 을 변경하여 런타임에 확인할 수 있습니다 .sp
Settings->Accessibility->Large Text
Large Text
옵션을 사용하면 텍스트의 1.3
시간이 더 커집니다.
private static final float LARGE_FONT_SCALE = 1.3f;
이것은 패키지 / 앱 / 설정 에 있기 때문에 물론 공급 업체에 따라 다를 수 있습니다 .
dpi-
px-픽셀
pt-포인트
인치 단위-실제 화면 크기 (1 인치 = 2.54cm)
mm- 밀리미터-실제 화면 크기와 관련하여.
sp-스케일 독립적 픽셀.
딥-
표준에서는 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
Android에서 사용하는 공식은 다음과 같습니다.
px = dp * (dpi / 160)
여기서 dpi는 다음 화면 밀도 중 하나입니다. 가능한 모든 밀도 목록을 보려면 여기로 이동
"DENSITY_ *"상수를 정의합니다.
여기 에서 찍은 .
화면 dpi를 아는 경우 px와 dp를 번역 할 때 많은 혼란이 발생합니다.
hdpi 화면에 60dp의 이미지를 원한다고 가정하면 실제 픽셀 크기는 60dp입니다.
px = 60 * (240 / 160)
화면 크기 에서이 Android
범주로 그룹화 small
, medium
, large
, extra large
, double-extra
와 triple-extra
. 화면 밀도는 화면 영역 (예 : 인치) 내의 픽셀 수입니다. 일반적으로 인치당 도트 수 (dpi)로 측정됩니다. 화면 밀도는 낮음, 중간, 높음 및 매우 높음으로 그룹화됩니다. 해상도는 화면의 총 픽셀 수입니다.
단위 간 변환 공식
px = dp * (dpi / 160)
장치에서 dp ~ px
다음 예는 더 잘 이해하는 데 도움이 될 수 있습니다. 스케일링은 120 (ldpi), 160 (mdpi), 240 (hdpi), 320 (xhdpi), 480 (xxhdpi) 및 640 (xxxhdpi)의 버킷 크기를 기준으로 발생합니다. Google이 제안한 설계 비율은 ldpi : mdpi : hdpi : xhdpi : xxhdpi의 3 : 4 : 6 : 8 : 12입니다.
150px X 150px 이미지는
- mdpi의 150dp X 150dp 화면 공간
- HDPI의 100dp X 100dp 화면 공간
- xhdpi의 75dp X 75dp 화면 공간
모든 Android 기기에서 균일 한 UI 디자인을 원할 경우 다음 DPI 계산기를 사용하여 이미지 크기 및 기타 치수를 수정할 수 있습니다.
/*
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);
}
}
자세한 내용은 다음 링크를 참조하십시오.
http://javapapers.com/android/difference-between-dp-dip-sp-px-in-mm-pt-in-android/
커뮤니티 위키에서 답변을 읽으십시오. 아래에는 위의 답변 외에도 고려해야 할 정보가 있습니다. 대부분의 Android 개발자는 앱을 개발하는 동안 이것을 놓치므로 이러한 요점을 추가하고 있습니다.
sp = 스케일 독립 픽셀
dp = 밀도 독립 픽셀
dpi = 밀도 픽셀
위의 답변을 겪었습니다 ... 정확히 정확한 것을 찾지 못했습니다. 텍스트 크기의 경우 sp, 레이아웃 경계의 경우 dp-표준 그러나 대부분의 장치에서 부주의하게 사용하면 텍스트 크기의 sp가 레이아웃을 손상시킵니다 .
sp는 장치의 텍스트 크기를 가져 오는 반면 dp는 장치 밀도 표준의 텍스트를 가져옵니다 (장치에서 변경되지 않음) 100sp 텍스트는 장치에 설정된 글꼴 크기에 따라 화면의 80 % 또는 화면의 100 %를 차지할 수 있다고 가정하십시오.
레이아웃 경계에도 sp를 사용할 수 있으며 작동합니다. :) 표준 앱은 전체 텍스트에 sp를 사용하지 않습니다.
UX를 고려한 텍스트 크기에는 sp와 dp를 사용하십시오.
일부 사람들은 가독성을 높이기 위해 휴대 전화에서 큰 FONT 크기를 사용하므로 작은 하드 코딩 된 텍스트 크기가 UX 문제가 될 수 있습니다. 필요한 곳에 텍스트를 sp로 표시하되, 사용자가 설정을 변경할 때 레이아웃이 깨지지 않도록하십시오.
마찬가지로 모든 차원을 지원하는 단일 앱이있는 경우 xxxhdpi 자산을 추가하면 앱 크기가 크게 증가합니다. 그러나 이제 xxxhdpi 전화가 일반적이므로 사이드 바, 도구 모음 및 하단 막대에 아이콘에 대해 xxxhdpi 자산을 포함시켜야합니다. 모든 화면 크기에 대해 균일하고 우수한 품질의 이미지를 얻으려면 벡터 이미지로 이동하는 것이 좋습니다.
또한 사람들은 휴대 전화에서 맞춤 글꼴을 사용합니다. 따라서 글꼴이 없으면 간격 및 모든 문제가 발생할 수 있습니다. 사용자 정의 글꼴의 텍스트 크기 12sp가 기본 글꼴보다 약간 픽셀이 더 걸릴 수 있다고 가정하십시오.
안드로이드의 화면 밀도 및 기본 밀도 세부 정보는 Google 개발자 사이트를 참조하십시오. https://developer.android.com/training/multiscreen/screendensities
다양한 화면 해상도를 위해 Android 앱 UI를 디자인하는 것에 대한 좋은 기사를 보았습니다.이 지역에서 검색하는 사람을 위해 여기에 남겨두고 싶습니다. 예, Google 문서에 설명되어 있으며 위의 게시물에 언급되어 있음을 알고 있지만 나에게 좋지는 않습니다 (예, 너무 어리 석습니다). 다른 화면 크기를 처리 할 수있는 레이아웃을 디자인하는 방법은 아직 명확하지 않습니다. 다른 화면에 대해 "유연한"UI 레이아웃을 구현해야 할 때 DP 개념 등이 싫습니다. (iOS 개발자 여러분, 예, 스토리 보드 개념이 맞습니다).
안드로이드는 나쁜 UI 개념은 아니지만 불행히도 iOS 스토리 보드 기능이 부족합니다. 안드로이드에서 유연한 UI를 디자인하는 것은 쉬운 일이 아닙니다.
다음은 다양한 화면 크기의 레이아웃을 만들기 위해 Android에서 수행 할 작업을 이해하는 데 도움이되는 기사입니다.
JMSTUDIO 블로그 :-안드로이드 앱 화면 크기 결정
화면 크기가 다른 Android 앱용 UI를 디자인하는 방법
다양한 화면 크기에 맞게 앱 UI를 디자인하려면 초기 디자인이 각 화면 크기에 필요한 최소 공간을 충족해야합니다. Android는 일반화 된 각 화면 유형에 대한 최소 크기 (dp)를 정의합니다. 다음은 Android 화면 크기 지침입니다. 화면 크기가 dp로 설정되면 Android 앱 UI를 디자인하는 것만으로는 충분하지 않습니다. 각 화면 크기마다 각 밀도에 대한 그래픽 및 비트 맵 이미지를 준비해야합니다. 다음은 Android 화면 밀도 지침입니다.
쉬운 계산을 위해 4 가지 일반 밀도 사이의 3 : 4 : 6 : 8 스케일링 비율을 따를 수 있습니다. ldpi 장치 용 36 × 36 픽셀 픽쳐를 생성하면 나머지 밀도 사진 크기는 mdpi의 경우 48 × 48, hdpi의 경우 72 × 72, xhdpi의 경우 96 × 96이됩니다.
Photoshop에서 Android 앱 UI를 디자인하는 방법
많은 디자이너들이 밀도 독립 유닛 (dp)으로 인해 포토샵이나 다른 픽셀 기반 그래픽 디자인 툴에서 안드로이드 앱 UI를 디자인하는 데 문제가 있습니다. 디자이너는 dp를 픽셀에 매핑하는 방법을 모른다. Google은 또한 dp 및 픽셀 변환에 대한 기본 공식을 제공하지만 명확한 Android UI 디자인 가이드를 제공하지 않습니다.
Android의 정의에 따르면 1pd는 160dpi 장치 (mdpi)에서 1px입니다. 따라서 mdpi 밀도의 xlarge Android 장치 용 Android 앱을 설계하려고합니다. UI 크기를 픽셀 너비 960 픽셀, 높이 720px로 정의 할 수 있습니다. 동일한 매핑 규칙을 따르면 Android 앱 화면 크기 UI 디자인 지침을 따를 수 있습니다.
ADDED : "flexible"UI에 관심이 있다면이 라이브러리를 살펴보십시오 . 새로운 크기 단위 인 sdp (확장 가능 dp)를 제공하는 Android SDK. 이 크기 단위는 화면 크기에 비례합니다 ( SDP
라이브러리에 대한 여기의 답변에서도 언급 됨 )
ADDED2 Google은 마침내 iOS Storeboard UI 개념의 유용성을 이해했으며 여기 ConstraintLayout
에 Android 세계가 있습니다 : ConstraintLayout을 사용하여 반응 형 UI 구축
1) dp: (density independent pixels)
dp 단위로 표시되는 픽셀 수는 화면 해상도가 증가함에 따라 증가합니다 (인치당 도트 / 픽셀이 더 많을 때). 반대로 해상도가 낮은 장치에서는 dp 단위로 표시되는 픽셀 수가 줄어 듭니다. 이것은 상대적인 단위이므로 비교할 기준이 있어야합니다. 이 기준은 160dpi 화면입니다. 이것은 방정식입니다.px = dp * (dpi / 160).
2) sp: (scale independent pixels)
이 단위는 화면 dpi (dp와 유사)와 사용자의 글꼴 크기 기본 설정에 따라 조정됩니다.
삼) px: (pixels)
화면의 실제 픽셀 또는 점.
자세한 내용은 방문 할 수 있습니다
화면 크기 안드로이드는 범주로 그룹화 ldpi
, mdpi
, hdpi
, xhdpi
, xxhdpi
와 xxxhdpi
. 화면 밀도 는 화면 영역 (예 : 인치) 내의 픽셀 수입니다. 일반적으로 인치당 도트 수 ( dpi
) 로 측정됩니다 .
PX(Pixels):
px
절대 픽셀을 의미합니다. 너비 또는 높이에 절대 픽셀로 표시하려는 경우에 사용됩니다. 권장하지 않습니다.DP/DIP(Density pixels / Density independent pixels):
dip == dp
. 이전 Android 버전에서는 딥이 사용되고 나중에로 변경되었습니다 dp
. 이것은의 대안입니다 px
.
일반적으로 px
절대 값이므로 절대 사용하지 않습니다 . 당신이 사용하는 경우 px
설정 너비 또는 높이에 해당 응용 프로그램이 다른 화면 크기의 장치에 다운로드되는 경우, 그리고, 다음 뷰는 화면 원래 크기에 따라 스트레칭되지 않습니다.
dp
대신에 사용하는 것이 좋습니다 px
. dp
너비와 높이를 언급하여 화면 크기에 따라 동적으로 커지거나 줄이려면 사용하십시오 .
우리가 제공 dp/dip
하면 안드로이드는 160 픽셀 크기의 화면을 기준으로 픽셀 크기를 자동으로 계산합니다.
SP(Scale independent pixels):
사용자의 글꼴 크기 기본 설정에 따라 조정됩니다. 글꼴은을 사용해야 sp
합니다.
다양한 화면 크기에 맞는 글꼴 크기를 언급 할 때는을 사용하십시오 sp
. 이 유사하다 dp
.Use sp
동적 화면 크기에 따라 글꼴 크기 성장 및 수축 특히 대한
안드로이드 문서는 말합니다 :
치수를 지정할 때는 항상
dp
또는sp
단위를 사용하십시오. Adp
는 160에서의 픽셀의 물리적 크기에 대응하는 밀도 독립적 픽셀이다dpi
. 는sp
동일한 기본 단위이지만, 사용자의 기본 텍스트 크기가 스케일링이 측정 유닛을 사용해야하므로 텍스트 크기를 정의 할 때, (그것 규모 독립적 픽셀의)
휴대 전화의 화면은 픽셀 (px) 이라고 알려진 수천 개의 작은 점들로 구성됩니다 . 픽셀은 그림을 만드는 가장 작은 요소입니다. 사진이나 문구를 만들 픽셀 수가 많을수록 더 선명 해지고 스마트 폰 화면을보다 쉽게 읽을 수 있습니다.
화면 해상도는 화면의 픽셀 수로 측정됩니다. 화면 해상도는 기기를 구매할 때 일반적으로 사용되는 사양이지만, 픽셀을 기준으로 화면을 생각하는 것은 물리적 크기의 개념을 무시하므로 터치 장치의 경우 실제로 중요하기 때문에 Android를 설계 할 때 실제로 유용하지 않습니다.
밀도 독립 픽셀 (dp 또는 dip)을 통해 디자이너는 대상 장치의 해상도 또는 밀도에 관계없이 예상 된 방식으로 표시되는 자산을 만들 수 있습니다.
밀도 독립 픽셀 (dp 또는 dip)은 기준 밀도 또는 160dpi (dots per inch)에서 1 픽셀과 같습니다.
1px / 1dp = 160dpi / 160dpi
2px / 1dp = 320dpi (2x) / 160dpi
어디,
dpi는 인치당 도트입니다
따라서 320dpi에서 1dp는 2px와 같습니다.
공식
px / dp = dpi / 160dpi
인치당 도트 수 (dpi)는 디스플레이 화면의 선명도 (즉, 조명 포인트의 밀도)를 측정 한 것입니다. 동일한 수의 픽셀이 다른 공간에 분산되어 있기 때문에 주어진 화면 해상도의 인치당 도트 수는 전체 화면 크기에 따라 다릅니다.
밀도 독립 픽셀을 사용하면 픽셀 해상도는 같지만 공간이 다른 두 개의 장치가있는 상황을 처리 할 수 있습니다. 경우에 따라 태블릿과 휴대폰의 픽셀 해상도가 각각 1280 x 800 픽셀 (160 dpi) 및 800 x 1280 픽셀 (320 dpi) 인 것으로 가정합니다.
태블릿은 기본 밀도 (160dpi)이므로 물리적 및 밀도 독립적 픽셀 크기는 1280 x 800과 같습니다. 반면 휴대 전화의 픽셀 밀도는 더 높으므로 물리적으로 절반의 밀도 독립 픽셀을 갖습니다. 픽셀. 따라서 휴대 전화는 400 x 640 밀도 독립 픽셀을 갖습니다. 따라서 밀도에 독립적 인 픽셀을 사용하면 태블릿보다 휴대 전화보다 훨씬 더 많은 공간이 있다는 것을 정신적으로 쉽게 파악할 수 있습니다.
마찬가지로 화면 크기는 비슷하지만 픽셀 밀도가 다른 두 장치가있는 경우 하나는 800 x 1280 픽셀 (320 dpi)이고 다른 하나는 400 x 640 픽셀 (160 dpi)이라고 말하면 완전히 정의 할 필요는 없습니다. 두 장치에 대해 동일한 밀도 독립 픽셀로 자산을 측정 할 수 있으므로이 두 장치에 대해 서로 다른 레이아웃을 사용합니다.
800 x 1280 픽셀 (320dpi) = 400 x 640 밀도 독립 픽셀 (dp)
400 x 640 픽셀 (160 dpi) = 400 x 640 밀도 독립 픽셀 (dp)
스케일 독립 픽셀 (sp) 은 글꼴 크기에 선호되는 단위입니다. 접근성을 위해 Android에서는 사용자가 기기의 글꼴 크기를 맞춤 설정할 수 있습니다. 텍스트를 읽는 데 문제가있는 사용자는 장치의 글꼴 크기를 늘릴 수 있습니다. 일반적으로이 옵션은 폰 또는 태블릿의 디스플레이 설정에서 글꼴 크기로 찾을 수 있습니다. 접근성 설정을 통해서도 종종 사용 가능합니다.
스케일 독립 픽셀의 경우 장치의 글꼴 크기가 정상이거나 100 % 인 경우 16 sp는 16dp와 정확히 동일합니다. 그러나 장치의 글꼴 크기 (예 : 125 %)가 크면 16 sp는 20dp 또는 1.25 곱하기 16으로 변환됩니다.
글꼴 크기의 단위로 dp를 사용하는 경우 사용자가 장치의 글꼴 크기를 사용자 지정했는지 여부에 관계없이 해당 텍스트 조각의 물리적 크기는 다릅니다. sp 단위를 사용하면 시력이 손상된 사람들에게 더 나은 경험을 제공 할 수 있습니다.
참조 : Udacity , Google
화면 픽셀 밀도 및 해상도는 플랫폼에 따라 다릅니다. 장치 독립적 픽셀 및 확장 가능 픽셀은 플랫폼에 걸쳐 디자인을 수용 할 수있는 유연한 방법을 제공하는 단위입니다.
1 인치에 맞는 픽셀 수를 픽셀 밀도라고합니다. 고밀도 스크린은 저밀도 스크린보다 인치당 픽셀 수가 더 많습니다.
1 인치에 맞는 픽셀 수를 픽셀 밀도라고합니다. 고밀도 화면은 저밀도 화면보다 인치당 픽셀 수가 더 많습니다. 결과적으로 동일한 픽셀 크기의 UI 요소는 저밀도 화면에서는 더 크게 나타나고 고밀도 화면에서는 더 작아집니다.
화면 밀도를 계산하려면 다음 방정식을 사용하십시오.
화면 밀도 = 픽셀 단위의 화면 너비 (또는 높이) / 인치 단위의 화면 너비 (또는 높이)
화면 픽셀 밀도 및 해상도는 플랫폼에 따라 다릅니다. 장치 독립적 픽셀 및 확장 가능 픽셀은 플랫폼에 걸쳐 디자인을 수용 할 수있는 유연한 방법을 제공하는 단위입니다.
픽셀 밀도 계산 인치에 맞는 픽셀 수를 픽셀 밀도 라고합니다 . 고밀도 스크린은 저밀도 스크린보다 인치당 픽셀 수가 더 많습니다.
밀도 독립 은 밀도가 다른 화면에 UI 요소가 균일하게 표시되는 것을 말합니다.
dp (“ 딥 ”으로 발음)로 작성된 밀도 독립적 픽셀 은 모든 화면에서 균일 한 크기로 확장되는 유연한 장치입니다. 재질 UI는 밀도 독립적 픽셀을 사용하여 밀도가 다른 화면에 요소를 일관되게 표시합니다.
픽셀 (px) – 화면의 실제 픽셀에 해당합니다. 너비 또는 높이에 절대 픽셀로 표시하려는 경우에 사용됩니다.
밀도 독립적 픽셀 (dp 또는 dip) – 화면의 물리적 밀도를 기반으로하는 추상 단위입니다. 이 단위는 160dpi 화면을 기준으로하므로 160dpi 화면에서 1dp는 1 픽셀입니다. dp 대 픽셀의 비율은 화면 밀도에 따라 변경되지만 반드시 직접 비율로 변경되는 것은 아닙니다. 참고 : 컴파일러는 "dip"및 "dp"를 모두 허용하지만 "dp"는 "sp"와 더 일치합니다.
스케일 독립 픽셀 (sp) – 이것은 dp 단위와 비슷하지만 사용자의 글꼴 크기 환경 설정에 따라 스케일됩니다. 글꼴 크기를 지정할 때이 단위를 사용하는 것이 좋으므로 화면 밀도와 사용자 기본 설정 모두에 맞게 조정됩니다.
항상 dp와 sp 만 사용하십시오. 폰트 크기는 sp, 그 외는 dp입니다. 밀도가 다른 Android 기기에 UI 호환이 가능합니다. 픽셀 및 dp에 대한 자세한 내용은 https://www.google.com/design/spec/layout/units-measurements.html#units-measurements-density-independent-pixels-dp-
소스 URL :-http: //www.androidtutorialshub.com/what-is-the-difference-between-px-dp-dip-sp-on-android/
이해하기 쉬운 방법을 제공하고 싶습니다 dp
. 사실, dp
이해하기 가장 쉬운 방법 이라고 생각 합니다. dp
실제 길이 단위입니다. 이 같은 차원의의 mm
나 inch
. 우리가 작성하는 것이 단지 편리 50dp
, 60dp
보다는 50/160 inch
나 60/160 inch
하나 때문에, dp
그냥 1/160 inch
화면 크기 나 해상도가 무엇이든.
유일한 문제는 일부 화면의 안드로이드 dpi가 정확하지 않다는 것입니다. 예를 들어 160dpi로 분류 된 화면에는 실제로 170dpi가있을 수 있습니다. 따라서 계산 결과 dp
가 흐릿합니다. 대략와 동일해야합니다 1/160 inch
.