다양 한 화면에 대 한 리소스 만들기Creating resources for varying screens

Android 자체는 각각 다양 한 해상도, 화면 크기 및 화면 밀도를 포함 하는 다양 한 장치에서 실행 됩니다.Android itself runs on many different devices, each having a wide variety of resolutions, screen sizes, and screen densities. Android는 이러한 장치에서 응용 프로그램이 작동 하도록 크기 조정 및 크기 조정을 수행 하지만이로 인해 사용자 환경이 매우 최적이 될 수 있습니다.Android will perform scaling and resizing to make your application work on these devices, but this may result in a sub-optimal user experience. 예를 들어 이미지가 흐리게 표시 되거나 뷰에서 예상 대로 배치 될 수 있습니다.For example, images could appear blurry, or they may be positioned as expected on a view.

개념Concepts

여러 화면을 지원 하기 위해 몇 가지 용어와 개념을 이해 하는 것이 중요 합니다.A few terms and concepts are important to understand to support multiple screens.

  • 화면 크기 – 응용 프로그램을 표시 하기 위한 실제 공간의 크기Screen Size – The amount of physical space for displaying your application

  • 화면 밀도 는 화면에서 지정 된 영역의 픽셀 수를 – 합니다.Screen Density – The number of pixels in any given area on the screen. 일반적인 측정 단위는 dpi (인치당 도트 수)입니다.The typical unit of measure is dots per inch (dpi).

  • 해상도 – 화면의 전체 픽셀 수를 표시 합니다.Resolution – The total number of pixels on the screen. 응용 프로그램을 개발할 때 해상도는 화면 크기 및 밀도 만큼 중요 하지 않습니다.When developing applications, resolution is not as important as screen size and density.

  • 밀도 독립적 픽셀 (dp) – 레이아웃을 밀도와 무관 하 게 설계할 수 있도록 하는 가상 측정 단위입니다.Density-independent pixel (dp) – A virtual unit of measure to allow layouts to be designed independent of density. 이 수식은 dp를 화면 픽셀로 변환 하는 데 사용 됩니다.This formula is used to convert dp into screen pixels:

    px = dp × dpi ÷ 160px = dp × dpi ÷ 160

  • 화면의 방향이 높이가 긴 경우 화면의 방향이 가로 인 것으로 간주 됩니다 . –Orientation – The screen's orientation is considered to be landscape when it is wider than it is tall. 반면 세로 방향은 화면이 너비가 넓은 경우입니다.In contrast, portrait orientation is when the screen is taller than it is wide. 사용자가 장치를 회전할 때 응용 프로그램의 수명 동안 방향이 변경 될 수 있습니다.The orientation can change during the lifetime of an application as the user rotates the device.

이러한 개념 중 처음 3 개는 상호 – 관련 되어 있으며, 밀도를 증가 시 키 지 않고 해상도를 늘리면 화면 크기가 증가 합니다.Notice that the first three of these concepts are inter-related – increasing the resolution without increasing the density will increase the screen size. 그러나 밀도와 해상도를 모두 늘리면 화면 크기가 변경 되지 않은 상태로 유지 될 수 있습니다.However if both the density and resolution are increased, then the screen size can remain unchanged. 화면 크기, 밀도 및 해상도의 이러한 관계는 화면을 신속 하 게 지원 합니다.This relationship between screen size, density, and resolution complicate screen support quickly.

이러한 복잡성을 해결 하기 위해 Android framework는 화면 레이아웃에 대 한 dp (밀도 독립적 픽셀) 를 사용 하는 것이 선호 됩니다.To help deal with this complexity, the Android framework prefers to use density-independent pixels (dp) for screen layouts. 밀도 독립 픽셀을 사용 하면 UI 요소가 사용자에 게 표시 되어 다른 밀도를 사용 하는 화면에서 동일한 실제 크기를 갖게 됩니다.By using density independent pixels, UI elements will appear to the user to have the same physical size on screens with different densities.

다양 한 화면 크기 및 밀도 지원Supporting various screen sizes and densities

Android는 각 화면 구성에 맞게 레이아웃을 올바르게 렌더링 하는 작업의 대부분을 처리 합니다.Android handles most of the work to render the layouts properly for each screen configuration. 그러나 시스템을 확장 하는 데 사용할 수 있는 몇 가지 작업이 있습니다.However, there are some actions that can be taken to help the system out.

대부분의 경우 밀도 독립성을 보장 하기 위해 레이아웃에 실제 픽셀 대신 밀도 독립적 픽셀을 사용 하는 것도 충분 합니다.The use of density-independent pixels instead of actual pixels in layouts is sufficient in most cases to ensure density independence. Android는 런타임에 적합 한 크기로 확장 가능 합니다.Android will scale the drawables at runtime to the appropriate size. 그러나 크기를 조정 하면 비트맵이 흐리게 표시 될 수 있습니다.However, it is possible that scaling will cause bitmaps to appear blurry. 이 문제를 해결 하려면 다양 한 밀도에 대 한 대체 리소스를 제공 합니다.To work around this problem, supply alternate resources for the different densities. 여러 해상도 및 화면 밀도를 위해 장치를 설계할 때 더 높은 해상도 또는 밀도 이미지를 사용 하 여 시작 하 고 축소 하는 것이 더 쉽습니다.When designing devices for multiple resolutions and screen densities, it will prove easier to start with the higher resolution or density images and then scale down.

지원 되는 화면 크기 선언Declare the supported screen size

화면 크기를 선언 하면 지원 되는 장치만 응용 프로그램을 다운로드할 수 있습니다.Declaring the screen size ensures that only supported devices can download the application. 이렇게 하려면 Androidmanifest .xml 파일의 지원 화면 요소를 설정 합니다.This is accomplished by setting the supports-screens element in the AndroidManifest.xml file. 이 요소는 응용 프로그램에서 지원 되는 화면 크기를 지정 하는 데 사용 됩니다.This element is used to specify what screen sizes are supported by the application. 지정 된 화면은 응용 프로그램에서 해당 레이아웃을 화면에 올바르게 삽입할 수 있는 경우 지원 되는 것으로 간주 됩니다.A given screen is considered to be supported if the application can properly place its layouts to fill screen. 이 매니페스트 요소를 사용 하면 화면 사양을 충족 하지 않는 장치에 대 한 Google Play 에 응용 프로그램이 표시 되지 않습니다.By using this manifest element, the application will not show up in Google Play for devices that do not meet the screen specifications. 그러나 응용 프로그램은 지원 되지 않는 화면을 사용 하는 장치에서 계속 실행 되지만 레이아웃은 흐린 및 모자이크로 표시 될 수 있습니다.However, the application will still run on devices with unsupported screens, but the layouts may appear blurry and pixelated.

지원 되는 화면 sixes 솔루션의 속성/AndroidManifest .xml 파일에 선언 됩니다.Supported screen sixes are declared in the Properites/AndroidManifest.xml file of the solution:

지원 화면을 포함 하도록 Androidmanifest 을 편집 합니다.Edit AndroidManifest.xml to include supports-screens:

<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>

여러 화면 크기에 대 한 대체 레이아웃 제공Provide alternate layouts for different screen sizes

대체 레이아웃을 사용 하면 구성 요소 UI 요소의 위치 또는 크기를 변경 하 여 특정 된 화면 크기에 대 한 뷰를 사용자 지정할 수 있습니다.Alternate layouts make it possible to customize a view for a specifc screen size, changing the positioning or size of the component UI elements.

API 수준 13 (Android 3.2) 부터는 swNdp 한정자를 사용 하기 위해 화면 크기가 더 이상 사용 되지 않습니다.Starting with API Level 13 (Android 3.2), the screen sizes are deprecated in favor of using the swNdp qualifier. 이 새 한정자는 지정 된 레이아웃에 필요한 공간의 크기를 선언 합니다.This new qualifier declares the amount of space a given layout needs. Android 3.2 이상에서 실행 되는 응용 프로그램은 이러한 최신 한정자를 사용 하는 것이 좋습니다.It is recommended that applications that are meant to run on Android 3.2 or higher should be using these newer qualifiers.

예를 들어 레이아웃에 화면 너비의 최소 700 dp가 필요한 경우 대체 레이아웃은 폴더 레이아웃-sw700dp로 이동 합니다.For example, if a layout required a minimum 700 dp of screen width, the alternate layout would go in a folder layout-sw700dp:

다음은 다양 한 장치에 대 한 몇 가지 지침입니다.As a guideline, here are some numbers for various devices:

  • 일반적인 전화 – 320 dp: 일반적인 전화Typical phone – 320 dp: a typical phone

  • 5 "태블릿/" tweener "장치 – 480 dp (예: Samsung Note)A 5" tablet / "tweener" device – 480 dp: such as the Samsung Note

  • 7 "태블릿 – 600 Dp: Barnes and & Noble nook와 같은A 7" tablet – 600 dp: such as the Barnes & Noble Nook

  • Motorola Xoom과 같은 10 개의 "태블릿 – 720 dp:A 10" tablet – 720 dp: such as the Motorola Xoom

API 수준을 최대 12 (Android 3.1)로 지정 하는 응용 프로그램의 경우 레이아웃은 다양 한 화면의 일반화를 사용 하는 한정자 small/normal/large/초대형 를 사용 하는 디렉터리로 이동 해야 합니다. 대부분의 장치에서 사용할 수 있는 크기입니다.For applications that target API levels up to 12 (Android 3.1), the layouts should go in directories that use the qualifiers small/normal/large/xlarge as generalizations of the various screen sizes that are available in most devices. 예를 들어 아래 이미지에는 4 개의 다른 화면 크기에 대 한 대체 리소스가 있습니다.For example, in the image below, there are alternate resources for the four different screen sizes:

다음은 이전 프리 API 수준 13 화면 크기 한정자가 밀도 독립적 픽셀과 어떻게 비교 되는지 비교 하는 것입니다.The following is a comparison of how the older pre-API Level 13 screen size qualifiers compare to density-independent pixels:

  • 426 dp x 320 dp가 작음426 dp x 320 dp is small

  • 470 dp x 320 dp가 정상 입니다.470 dp x 320 dp is normal

  • 640 dp x 480 dp가 640 dp x 480 dp is large

  • 960 dp x 720 dp는 초대형960 dp x 720 dp is xlarge

API 수준 13 이상에서 최신 화면 크기 한정자는 API 수준 12 이하의 이전 화면 한정자 보다 우선 순위가 높습니다.The newer screen size qualifiers in API level 13 and up have a higher precedence than the older screen qualifiers of API levels 12 and lower. 이전 및 새 API 수준으로 확장 되는 응용 프로그램의 경우 다음 스크린샷에 표시 된 것 처럼 두 한정자 집합을 사용 하 여 대체 리소스를 만들어야 할 수 있습니다.For applications that will span the old and the new API levels, it may be necessary to create alternate resources using both sets of qualifiers as shown in the following screenshot:

화면 밀도 마다 다른 비트맵 제공Provide different bitmaps for different screen densities

Android는 장치에 필요한 대로 비트맵 크기를 조정 하지만, 비트맵 자체의 크기를 조정 하거나 원활 하지 않을 수 있습니다 .이는 유사 하거나 흐린 것일 수 있습니다.Although Android will scale bitmaps as necessary for a device, the bitmaps themselves may not elegantly scale up or down: they may become fuzzy or blurry. 화면 밀도에 적절 한 비트맵을 제공 하면이 문제를 완화할 수 있습니다.Providing bitmaps appropriate for the screen density will mitigate this problem.

예를 들어 아래 이미지는 밀도 지정 리소스를 제공 하지 않을 때 발생할 수 있는 레이아웃 및 모양 문제의 예입니다.For example, the image below is an example of layout and appearance problems that may occur when density-specify resources are not provided.

밀도 리소스가 없는 스크린샷

이를 밀도 별 리소스로 디자인 된 레이아웃과 비교 합니다.Compare this to a layout that is designed with density-specific resources:

밀도 관련 리소스가 있는 스크린샷

Android Asset Studio를 사용 하 여 다양 한 밀도 리소스 만들기Create varying density resources with Android Asset Studio

다양 한 밀도의 이러한 비트맵을 만드는 것이 다소 지루한 일 수 있습니다.The creation of these bitmaps of various densities can be a bit tedious. 따라서 Google은 Android Asset Studio라는 이러한 비트맵 만들기와 관련 된 일부 번거로움을를 줄일 수 있는 온라인 유틸리티를 만들었습니다.As such, Google has created an online utility that can reduce some of the tedium involved with the creation of these bitmaps called the Android Asset Studio.

Android Asset StudioAndroid Asset Studio

이 웹 사이트는 하나의 이미지를 제공 하 여 네 가지 일반적인 화면 밀도를 대상으로 하는 비트맵을 만드는 데 도움이 됩니다.This website will help with creation of bitmaps that target the four common screen densities by providing one image. 그러면 Android Asset Studio에서 일부 사용자 지정 항목을 사용 하 여 비트맵을 만든 다음 zip 파일로 다운로드할 수 있습니다.Android Asset Studio will then create the bitmaps with some customizations and then allow them to be downloaded as a zip file.

여러 화면에 대 한 팁Tips for multiple screens

Android는 놀랄만한 수의 장치에서 실행 되며 화면 크기와 화면 밀도의 조합을 과도 하 게 볼 수 있습니다.Android runs on a bewildering number of devices, and the combination of screen sizes and screen densities can seem overwhelming. 다음은 다양 한 장치를 지 원하는 데 필요한 노력을 최소화 하는 데 도움이 되는 팁입니다.The following tips can help minimize the effort necessary to support various devices:

  • 필요한 –에 대해서만 디자인 하 고 개발할 수 있습니다. 그러나 몇 가지 장치를 사용 하는 경우에만 디자인 하 고 개발 하는 데 상당한 노력이 소요 될 수 있는 드문 폼 팩터는 있습니다.Only design and develop for what you need – There are many different devices out there, but some exist in rare form factors that may take significant effort to design and develop for. 화면 크기 및 밀도 대시보드는 화면 크기/화면 밀도 행렬의 분석에 대 한 데이터를 제공 하는 Google에서 제공 하는 페이지입니다.The Screen Size and Density dashboard is a page provided by Google that provides data on breakdown of the screen size/screen density matrix. 이 분석을 통해 화면 지원에 대 한 개발 노력에 대 한 통찰력을 얻을 수 있습니다.This breakdown provides insight on how to development effort on supporting screens.

  • 픽셀 대신 DPs를 사용 하면 화면 밀도가 변경 될 때 문제가 됩니다.Use DPs rather than Pixels - Pixels become troublesome as screen density changes. 픽셀 값을 하드 코딩 하지 마십시오.Do not hardcode pixel values. Dp (밀도 독립적 픽셀)를 사용 하 여 픽셀을 방지 합니다.Avoid pixels in favor of dp (density-independent pixels).

  • 가능 하면 AbsoluteLayout 사용 하지 않는 것이 좋습니다 .이는 API 수준 3 (Android 1.5)에서 더 이상 사용 되지 않으며 불안정 레이아웃을 생성 합니다.Avoid AbsoluteLayout Wherever Possible – it is deprecated in API level 3 (Android 1.5) and will result in brittle layouts. 사용 하면 안 됩니다.It should not be used. 대신 LinearLayout, RelativeLayout또는 새 GridLayout와 같은 더 유연한 레이아웃 위젯을 사용 합니다.Instead, try to use more flexible layout widgets such as LinearLayout, RelativeLayout, or the new GridLayout.

  • 기본 – 레이아웃 방향을 선택 합니다. 예를 들어 대체 리소스를 제공 하는 대신 모양레이아웃 포트를 제공 하 고, 레이아웃에 가로 및 세로의 리소스를 배치 하는 것이 좋습니다. layout-포트Pick one layout orientation as your default – For example, instead of providing the alternate resources layout-land and layout-port, put the resources for landscape in layout, and the resources for portrait into layout-port.

  • Height 및 Width에 대해 LayoutParams 사용 -XML 레이아웃 파일에서 UI 요소를 정의 하는 경우 wrap_contentfill_parent 값을 사용 하는 Android 응용 프로그램은 더 많은 성공을 보장 합니다. 픽셀 또는 밀도 독립적 단위 사용.Use LayoutParams for Height and Width - When defining UI elements in an XML layout file, an Android application using the wrap_content and fill_parent values will have more success ensure a proper look across different devices than using pixel or density-independent units. 이러한 차원 값으로 인해 Android에서 비트맵 리소스를 적절 하 게 확장할 수 있습니다.These dimension values cause Android to scale bitmap resources as appropriate. 이와 같은 이유로, 밀도 독립적 단위는 UI 요소의 여백 및 안쪽 여백을 지정 하는 경우에 적합 합니다.For this same reason, density-independent units are best reserved for when specifying the margins and padding of UI elements.

여러 화면 테스트Testing multiple screens

Android 응용 프로그램은 지원 되는 모든 구성에 대해 테스트 되어야 합니다.An Android application must be tested against all configurations that will be supported. 이상적인 장치는 실제 장치 자체에서 테스트 해야 하지만 대부분의 경우에는 불가능 하거나 실용적이 지 않습니다.Ideally devices should be tested on the actual devices themselves but in many cases this is not possible or practical. 이 경우 각 장치 구성에 에뮬레이터 및 Android 가상 장치 설치를 사용 하는 것이 유용 합니다.In this case, the use of the emulator and Android Virtual Devices setup for each device configuration will be useful.

Android SDK는 AVDs를 만드는 데 사용할 수 있는 일부 에뮬레이터 스킨을 제공 하 여 많은 장치의 크기, 밀도 및 해상도를 복제 합니다.The Android SDK provides some emulator skins may be used to create AVDs will replicate the size, density, and resolution of many devices. 하드웨어 공급 업체의 대부분은 장치에 대 한 스킨을 제공 합니다.Many of the hardware vendors likewise provide skins for their devices.

또 다른 옵션은 타사 테스트 서비스의 서비스를 사용 하는 것입니다.Another option is to use the services of a third party testing service. 이러한 서비스는 APK를 사용 하 여 여러 다른 장치에서 실행 한 다음 응용 프로그램이 작동 하는 방식에 대 한 피드백을 제공 합니다.These services will take an APK, run it on many different devices, and then provide feedback how the application worked.