다양 한 화면에 대 한 리소스 만들기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 프레임 워크 사용을 선호 밀도 독립적 픽셀 (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에서 선언 되는 Properites/AndroidManifest.xml 솔루션의 파일:Supported screen sixes are declared in the Properites/AndroidManifest.xml file of the solution:

편집할 AndroidManifest.xml 포함할 지원 화면: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)부터 화면 크기는 사용 되지 않습니다는 sw 사용 하기 위해Ndp 한정자입니다.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 메모 등A 5" tablet / "tweener" device – 480 dp: such as the Samsung Note

  • 7"태블릿 – 600 dp:는 Barnes 같은 & Noble NookA 7" tablet – 600 dp: such as the Barnes & Noble Nook

  • 10"태블릿 – 720 dp: Motorola Xoom 등A 10" tablet – 720 dp: such as the Motorola Xoom

응용 프로그램에 대 한 대상 API 수준 12 (Android 3.1)이 최대는 레이아웃에서에서 진행 해야 한정자를 사용 하는 디렉터리가 소규모/정상/ / 초대형 대부분의 장치에서 사용할 수 있는 다양 한 화면 크기의 일반화로 합니다.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. 예를 들어 아래 이미지에는 네 개의 서로 다른 화면 크기에 대 한 대체 리소스For example, in the image below, there are alternate resources for the four different screen sizes:

다음은 이전 pre-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 dp를 x 320 작은426 dp x 320 dp is small

  • 470 dp dp를 x 320 정상470 dp x 320 dp is normal

  • 640 dp dp를 x 480 640 dp x 480 dp is large

  • 960 dp dp를 x 720 초대형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.

  • 기본값으로 하나의 레이아웃 방향을 선택 – 대체 리소스를 제공 하는 대신에 예를 들어 레이아웃 land 하 고 레이아웃 포트에 대 한 리소스 가로 레이아웃, 및 세로 모드에 대 한 리소스 레이아웃 포트합니다.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.

  • LayoutParams를 사용 하 여 높이 및 너비에 대 한 -XML 레이아웃 파일의 UI 요소를 정의 하는 경우 사용 하 여 Android 응용 프로그램을 wrap_contentfill_parent 값에 더 많은 성공 해야 합니다. 픽셀 또는 밀도 독립적 단위를 사용 하 여 보다 다양 한 장치의 적절 한 참조를 확인 합니다.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 크기, 밀도 및 다양 한 장치 해상도 일부 에뮬레이터 스킨 Avd를 만드는 데 사용할 수는 복제를 제공 합니다.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.