Share via


다양한 화면에 대한 리소스 만들기

Android 자체는 다양한 해상도, 화면 크기 및 화면 밀도를 갖는 다양한 디바이스에서 실행됩니다. Android는 이러한 디바이스에서 애플리케이션을 작동하도록 크기 조정 및 크기 조정을 수행하지만 이로 인해 사용자 환경이 최적화되지 않을 수 있습니다. 예를 들어 이미지가 흐리게 표시되거나 보기에 예상대로 배치될 수 있습니다.

개념

몇 가지 용어와 개념은 여러 화면을 지원하기 위해 이해하는 것이 중요합니다.

  • 화면 크기 - 애플리케이션을 표시하기 위한 물리적 공간의 양

  • 화면 밀도 – 화면의 지정된 영역에 있는 픽셀 수입니다. 일반적인 측정 단위는 인치당 점(dpi)입니다.

  • 해상도 – 화면의 총 픽셀 수입니다. 애플리케이션을 개발할 때 해상도는 화면 크기 및 밀도만큼 중요하지 않습니다.

  • 밀도 독립적 픽셀(dp) – 밀도와 독립적으로 레이아웃을 설계할 수 있도록 하는 측정 단위입니다. 이 수식은 dp를 화면 픽셀로 변환하는 데 사용됩니다.

    px = dp × dpi ÷ 160

  • 방향 – 화면의 방향은 높이보다 넓을 때 가로로 간주됩니다. 반면 세로 방향은 화면이 너비보다 큰 경우입니다. 사용자가 디바이스를 회전할 때 애플리케이션의 수명 동안 방향이 변경됩니다.

이러한 개념 중 처음 세 가지는 상호 관련되어 있습니다. 밀도를 높이지 않고 해상도를 높이면 화면 크기가 증가합니다. 그러나 밀도와 해상도가 모두 증가하면 화면 크기가 변경되지 기본 수 있습니다. 화면 크기, 밀도 및 해상도 간의 이러한 관계는 화면 지원을 빠르게 복잡하게 만듭니다.

이러한 복잡성을 처리하기 위해 Android 프레임워크는 화면 레이아웃에 밀도 독립적 픽셀(dp)을 사용하는 것을 선호합니다. 밀도 독립적 픽셀을 사용하면 UI 요소가 사용자에게 표시되어 밀도가 다른 화면에서 실제 크기가 동일합니다.

다양한 화면 크기 및 밀도 지원

Android는 각 화면 구성에 맞게 레이아웃을 제대로 렌더링하기 위해 대부분의 작업을 처리합니다. 그러나 시스템 작동을 돕기 위해 수행할 수 있는 몇 가지 작업이 있습니다.

대부분의 경우 레이아웃에서 실제 픽셀 대신 밀도 독립적 픽셀을 사용하면 밀도 독립성을 보장하기에 충분합니다. Android는 런타임에 드로블을 적절한 크기로 확장합니다. 그러나 크기 조정으로 인해 비트맵이 흐리게 표시될 수 있습니다. 이 문제를 해결하려면 다양한 밀도에 대한 대체 리소스를 제공합니다. 여러 해상도 및 화면 밀도를 위한 디바이스를 디자인할 때 더 높은 해상도 또는 밀도 이미지로 시작한 다음 스케일 다운하는 것이 더 쉬워질 것입니다.

지원되는 화면 크기 선언

화면 크기를 선언하면 지원되는 디바이스만 애플리케이션을 다운로드할 수 있습니다. 이 작업은 AndroidManifest.xml 파일에서 지원 화면 요소를 설정하여 수행됩니다. 이 요소는 애플리케이션에서 지원되는 화면 크기를 지정하는 데 사용됩니다. 애플리케이션이 화면을 채우기 위해 레이아웃을 제대로 배치할 수 있는 경우 지정된 화면이 지원되는 것으로 간주됩니다. 이 매니페스트 요소를 사용하면 화면 사양을 충족하지 않는 디바이스에 대한 애플리케이션이 Google Play 에 표시되지 않습니다. 그러나 애플리케이션은 지원되지 않는 화면이 있는 디바이스에서 계속 실행되지만 레이아웃이 흐리게 표시되고 픽셀화될 수 있습니다.

지원되는 화면 식스는 솔루션의 Properites/AndroidManifest.xml 파일에 선언됩니다.

지원 화면을 포함하도록 AndroidManifest.xml 편집합니다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          android:versionCode="1"
          android:versionName="1.0"
          package="HelloWorld.HelloWorld">
      <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="27" />
      <supports-screens android:resizable="true"
                        android:smallScreens="true"
                        android:normalScreens="true"
                        android:largeScreens="true" />
      <application android:allowBackup="true"
                   android:icon="@mipmap/ic_launcher"
                   android:label="@string/app_name"
                   android:roundIcon="@mipmap/ic_launcher_round"
                   android:supportsRtl="true" android:theme="@style/AppTheme">
  </application>
</manifest>

다양한 화면 크기에 대한 대체 레이아웃 제공

대체 레이아웃을 사용하면 구성 요소 UI 요소의 위치 또는 크기를 변경하여 특정 화면 크기에 맞게 보기를 사용자 지정할 수 있습니다.

API 수준 13(Android 3.2)부터는 swNdp 한정자를 사용하기 위해 화면 크기가 더 이상 사용되지 않습니다. 이 새 한정자는 지정된 레이아웃에 필요한 공간의 양을 선언합니다. Android 3.2 이상에서 실행하려는 애플리케이션은 이러한 최신 한정자를 사용하는 것이 좋습니다.

예를 들어 레이아웃에 화면 너비가 최소 700dp인 경우 대체 레이아웃은 폴더 레이아웃-sw700dp로 이동합니다.

지침으로 다양한 디바이스에 대한 몇 가지 숫자는 다음과 같습니다.

  • 일반 전화 – 320 dp: 일반 전화

  • 5" 태블릿/"트윈" 장치 – 480 dp: Samsung Note와 같은

  • A 7" 태블릿 – 600 dp: 같은 반즈 & 노블 구석

  • 10" 태블릿 – 720 dp: 모토로라 Xoom 등

최대 12개(Android 3.1)의 API 수준을 대상으로 하는 애플리케이션의 경우 레이아웃은 대부분의 디바이스에서 사용할 수 있는 다양한 화면 크기의 일반화로 한정자 작은/일반/큰/xlarge를 사용하는 디렉터리로 이동해야 합니다. 예를 들어 아래 이미지에는 네 가지 화면 크기에 대한 대체 리소스가 있습니다.

다음은 이전 API 수준 13 화면 크기 한정자가 밀도 독립적 픽셀과 비교되는 방식을 비교한 것입니다.

  • 426 dp x 320 dp가 작음

  • 470 dp x 320 dp는 정상입니다 .

  • 640 dp x 480 dp가 큼

  • 960 dp x 720 dp is xlarge

API 수준 13 이상의 최신 화면 크기 한정자는 API 수준 12 이하의 이전 화면 한정자보다 우선 순위가 높습니다. 이전 및 새 API 수준에 걸쳐 있는 애플리케이션의 경우 다음 스크린샷과 같이 두 한정자 집합을 사용하여 대체 리소스를 만들어야 할 수 있습니다.

다양한 화면 밀도에 대해 다른 비트맵 제공

Android는 디바이스에 필요한 대로 비트맵의 크기를 조정하지만 비트맵 자체는 우아하게 확장 또는 축소되지 않을 수 있습니다. 유사하거나 흐릿해질 수 있습니다. 화면 밀도에 적합한 비트맵을 제공하면 이 문제가 완화됩니다.

예를 들어 아래 이미지는 밀도 지정 리소스가 제공되지 않을 때 발생할 수 있는 레이아웃 및 모양 문제의 예입니다.

Screenshots without density resources

밀도별 리소스를 사용하여 디자인된 레이아웃과 비교합니다.

Screenshots with density-specific resources

Android Asset Studio를 사용하여 다양한 밀도 리소스 만들기

다양한 밀도의 이러한 비트맵 생성은 약간 지루할 수 있습니다. 이와 같이, 구글은 안드로이드 자산 스튜디오라는 이러한 비트맵의 생성과 관련된 지루함의 일부를 줄일 수있는 온라인 유틸리티를 만들었습니다.

Android Asset Studio

이 웹 사이트는 하나의 이미지를 제공하여 네 가지 일반적인 화면 밀도를 대상으로 하는 비트맵을 만드는 데 도움이 됩니다. 그런 다음 Android Asset Studio는 일부 사용자 지정을 사용하여 비트맵을 만든 다음 zip 파일로 다운로드할 수 있도록 허용합니다.

여러 화면에 대한 팁

Android는 어리둥절한 수의 장치에서 실행되며 화면 크기와 화면 밀도의 조합은 압도적 인 것처럼 보일 수 있습니다. 다음 팁은 다양한 디바이스를 지원하는 데 필요한 노력을 최소화하는 데 도움이 될 수 있습니다.

  • 필요한 항목에 대해서만 디자인 및 개발 – 다양한 디바이스가 있지만 일부 디바이스는 디자인 및 개발에 상당한 노력이 필요할 수 있는 드문 폼 팩터에 존재합니다. 화면 크기 및 밀도 대시보드는 화면 크기/화면 밀도 행렬의 분석 데이터를 제공하는 Google에서 제공하는 페이지입니다. 이 분석은 지원 화면에 대한 개발 노력에 대한 인사이트를 제공합니다.

  • 픽셀 대신 DP 사용 - 화면 밀도가 변경되면 픽셀이 번거로워집니다. 픽셀 값을 하드 코딩하지 마세요. dp(밀도 독립적 픽셀)를 위해 픽셀을 사용하지 마세요.

  • 가능한 경우 AbsoluteLayout을 사용하지 마세요. API 수준 3(Android 1.5)에서는 사용되지 않으며, 이로 인해 취성 레이아웃이 생성됩니다. 사용해서는 안 됩니다. 대신 LinearLayout, RelativeLayout 또는 새 GridLayout과 같은 보다 유연한 레이아웃 위젯을 사용하려고 합니다.

  • 하나의 레이아웃 방향을 기본값으로 선택합니다. 예를 들어 대체 리소스 레이아웃-토지레이아웃 포트를 제공하는 대신 레이아웃에 대한 리소스와 세로의 리소스를 레이아웃 포트배치합니다.

  • Height 및 Width에 LayoutParams 사용 - XML 레이아웃 파일에서 UI 요소를 정의할 때 wrap_content 및 fill_parent 값을 사용하는 Android 애플리케이션은 픽셀 또는 밀도 독립적 단위를 사용하는 것보다 여러 디바이스에서 적절한 모양을 보장하는 데 더 많은 성공을 거둘 수 있습니다. 이러한 차원 값으로 인해 Android는 비트맵 리소스의 크기를 적절하게 조정합니다. 이와 같은 이유로 밀도 독립적 단위는 UI 요소의 여백 및 안쪽 여백을 지정할 때 가장 적합합니다.

여러 화면 테스트

Android 애플리케이션은 지원되는 모든 구성에 대해 테스트해야 합니다. 이상적으로 디바이스는 실제 디바이스 자체에서 테스트해야 하지만 대부분의 경우 가능하거나 실용적이지 않습니다. 이 경우 각 디바이스 구성에 대한 에뮬레이터 및 Android 가상 디바이스 설정을 사용하는 것이 유용합니다.

Android SDK는 AVD를 만드는 데 사용할 수 있는 몇 가지 에뮬레이터 스킨을 제공하여 많은 디바이스의 크기, 밀도 및 해상도를 복제본(replica). 마찬가지로 하드웨어 공급 업체의 대부분은 자신의 장치에 대한 스킨을 제공합니다.

또 다른 옵션은 타사 테스트 서비스의 서비스를 사용하는 것입니다. 이러한 서비스는 APK를 사용하고 다양한 디바이스에서 실행한 다음 애플리케이션 작동 방식에 대한 피드백을 제공합니다.