Android
다양한 해상도, 크기로 화면 지원
수색…
비고
용어 및 개념
화면 크기
화면의 대각선으로 측정 된 실제 물리적 크기입니다. 간단히하기 위해 Android는 모든 실제 화면 크기를 네 가지 일반화 된 크기 (소규모, 보통, 대형 및 초대형)로 그룹화합니다.
스크린 밀도
화면의 물리적 영역 내의 픽셀 수. 일반적으로 dpi (인치당 도트 수)라고합니다. 예를 들어, "저"밀도 화면은 "일반"또는 "고"밀도 화면과 비교하여 주어진 물리적 영역 내에서 더 적은 픽셀을 갖습니다. 단순함을 위해 Android는 모든 실제 화면 밀도를 저, 중, 고, 초고속, 초고속 및 초고속의 6 가지 일반화 된 밀도로 그룹화합니다.
정위
사용자의 시점에서 화면의 방향. 가로 또는 세로로, 화면의 종횡비가 각각 너비 또는 높이입니다. 다른 장치가 기본적으로 다른 방향으로 작동 할뿐만 아니라 사용자가 장치를 회전 할 때 런타임에 방향이 변경 될 수 있습니다. 해상도 화면의 총 물리적 픽셀 수입니다. 여러 화면에 대한 지원을 추가 할 때 응용 프로그램은 해상도로 직접 작동하지 않습니다. 응용 프로그램은 일반화 된 크기 및 밀도 그룹에 지정된대로 화면 크기 및 밀도에만 관심을 가져야합니다. 밀도 독립적 픽셀 (dp) UI 레이아웃을 정의하거나 레이아웃 차원을 표현하거나 밀도 독립적 인 방식으로 위치를 지정할 때 사용해야하는 가상 픽셀 단위입니다. 밀도 비 독립 픽셀은 "중간"밀도 화면에 대해 시스템에서 가정 한 기본 밀도 인 160dpi 화면의 한 물리적 픽셀과 동일합니다. 런타임시 시스템은 사용중인 화면의 실제 밀도를 기반으로 필요에 따라 dp 장치의 크기 조정을 투명하게 처리합니다. dp 단위의 스크린 픽셀로의 변환은 간단합니다 : px = dp * (dpi / 160). 예를 들어 240 dpi 화면에서 1 dp는 1.5 실제 픽셀과 같습니다. 응용 프로그램의 UI를 정의 할 때는 항상 dp 단위를 사용해야하며, 서로 다른 밀도의 화면에 UI가 제대로 표시되도록해야합니다.
단위
픽셀
픽셀 - 화면의 실제 픽셀에 해당합니다.
...에서
인치 - 화면의 실제 크기를 기반으로합니다. 1 인치 = 2.54 센티미터
mm
밀리미터 - 화면의 실제 크기를 기반으로합니다.
태평양 표준시
포인트 - 화면의 물리적 크기에 따라 1/72 인치.
dp 또는 dip
밀도 독립 픽셀 - 화면의 물리적 밀도를 기반으로하는 추상 단위입니다. 이 단위는 160 dpi 화면과 관련이 있으므로 한 dp는 160 dpi 화면에서 한 픽셀입니다. dp 대 픽셀의 비율은 화면 밀도에 따라 변경되지만 반드시 비율에 따라 달라질 수는 없습니다. 참고 : "dp"는 "sp"와 더 일관성이 있지만 컴파일러에서는 "dip"과 "dp"를 모두 허용합니다.
sp
비늘 크기 독립 픽셀 - 이것은 dp 단위와 비슷하지만 사용자의 글꼴 크기 기본 설정에 따라 크기가 조정됩니다. 글꼴 크기를 지정할 때이 장치를 사용하는 것이 좋으므로 화면 밀도와 사용자 기본 설정 모두에 맞게 조정됩니다. 안드로이드에서의 밀도의 독립성 이해에서 :
단위 | 기술 | 물리적 인 인치당 단위 | 밀도 독립 | 모든 화면에서 동일한 물리적 크기 |
---|---|---|---|---|
픽셀 | 픽셀 | 다양 함 | 아니 | 아니 |
...에서 | 신장 | 1 | 예 | 예 |
mm | 밀리미터 | 25.4 | 예 | 예 |
태평양 표준시 | 전철기 | 72 | 예 | 예 |
DP | 밀도 독립 픽셀 | ~ 160 | 예 | 아니 |
sp | 스케일 독립 픽셀 | ~ 160 | 예 | 아니 |
참고 문헌 :
구성 한정자 사용
Android는 현재의 장치 화면의 특성을 기반으로 시스템이 대체 자원을 선택하는 방법을 제어 할 수있는 몇 가지 구성 한정자를 지원합니다. 구성 한정자는 Android 프로젝트의 리소스 디렉토리에 추가 할 수있는 문자열이며 내부 리소스가 디자인 된 구성을 지정합니다.
구성 한정자를 사용하려면 다음을 수행하십시오.
- 프로젝트의 res / 디렉토리에 새 디렉토리를 만들고
<resources_name>-<qualifier>
형식으로 이름을 지정하십시오.<resources_name>
은 드로어 블 또는 레이아웃과 같은 표준 리소스 이름입니다. -
<qualifier>
는 구성 한정자로서 이러한 리소스가 사용될 화면 구성 (예 : hdpi 또는 xlarge)을 지정합니다.
예를 들어, 다음 응용 프로그램 자원 디렉토리는 서로 다른 화면 크기와 서로 다른 드로어 블에 대해 서로 다른 레이아웃 디자인을 제공합니다. 런처 아이콘으로 mipmap/
폴더를 사용하십시오.
res/layout/my_layout.xml // layout for normal screen size ("default")
res/layout-large/my_layout.xml // layout for large screen size
res/layout-xlarge/my_layout.xml // layout for extra-large screen size
res/layout-xlarge-land/my_layout.xml // layout for extra-large in landscape orientation
res/drawable-mdpi/graphic.png // bitmap for medium-density
res/drawable-hdpi/graphic.png // bitmap for high-density
res/drawable-xhdpi/graphic.png // bitmap for extra-high-density
res/drawable-xxhdpi/graphic.png // bitmap for extra-extra-high-density
res/mipmap-mdpi/my_icon.png // launcher icon for medium-density
res/mipmap-hdpi/my_icon.png // launcher icon for high-density
res/mipmap-xhdpi/my_icon.png // launcher icon for extra-high-density
res/mipmap-xxhdpi/my_icon.png // launcher icon for extra-extra-high-density
res/mipmap-xxxhdpi/my_icon.png // launcher icon for extra-extra-extra-high-density
dp와 sp를 픽셀로 변환하기
Paint.setTextSize
와 같은 픽셀 값을 설정해야하지만 기기에 따라 크기를 조정하려면 dp 및 sp 값을 변환 할 수 있습니다.
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 12f, metrics);
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 12f, metrics);
또는 리소스를로드 할 컨텍스트가있는 경우 차원 리소스를 픽셀로 변환 할 수 있습니다.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="size_in_sp">12sp</dimen>
<dimen name="size_in_dp">12dp</dimen>
</resources>
// Get the exact dimension specified by the resource
float pixels = context.getResources().getDimension(R.dimen.size_in_sp);
float pixels = context.getResources().getDimension(R.dimen.size_in_dp);
// Get the dimension specified by the resource for use as a size.
// The value is rounded down to the nearest integer but is at least 1px.
int pixels = context.getResources().getDimensionPixelSize(R.dimen.size_in_sp);
int pixels = context.getResources().getDimensionPixelSize(R.dimen.size_in_dp);
// Get the dimension specified by the resource for use as an offset.
// The value is rounded down to the nearest integer and can be 0px.
int pixels = context.getResources().getDimensionPixelOffset(R.dimen.size_in_sp);
int pixels = context.getResources().getDimensionPixelOffset(R.dimen.size_in_dp);
텍스트 크기 및 다양한 Android 화면 크기
때로는 세 가지 옵션 만 사용하는 것이 좋습니다.
style="@android:style/TextAppearance.Small"
style="@android:style/TextAppearance.Medium"
style="@android:style/TextAppearance.Large"
작은 화면과 큰 화면을 사용하여 일반적인 화면 크기와 구분하십시오.
<TextView
android:id="@+id/TextViewTopBarTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@android:style/TextAppearance.Small"/>
정상적인 경우에는 아무 것도 지정하지 않아도됩니다.
<TextView
android:id="@+id/TextViewTopBarTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
이를 사용하면 다양한 화면 크기에 대한 치수를 테스트하고 지정하지 않아도됩니다.