page.title=다양한 화면 밀도 지원 parent.title=다양한 화면 지원 parent.link=index.html trainingnavtop=true previous.title=다양한 화면 크기 지원 previous.link=screensizes.html next.title=조정형 UI 플로우 구현 next.link=adaptui.html @jd:body <!-- This is the training bar --> <div id="tb-wrapper"> <div id="tb"> <h2>강의 목표</h2> <ol> <li><a href="#TaskUseDP">DIP(Density Independent Pixel) 사용</a></li> <li><a href="#TaskProvideAltBmp">대체 비트맵 제공</a></li> </ol> <h2>참고자료</h2> <ul> <li><a href="{@docRoot}guide/practices/screens_support.html">여러 화면 지원</a></li> <li><a href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">아이콘 디자인 가이드라인</a></li> </ul> <h2>다운로드 </h2> <div class="download-box"> <a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">샘플 앱 다운로드</a> <p class="filename">NewsReader.zip</p> </div> </div> </div> <p>이 강의에서는 다양한 리소스를 제공하고 해상도 독립형(resolution-independent) 측정 단위를 사용함으로써 다양한 화면 밀도를 지원하는 방법을 설명합니다.</p> <h2 id="TaskUseDP">DIP(Density Independent Pixel) 사용</h2> <p>레이아웃을 디자인할 때 범하기 쉬운 실수 중 하나는 절대 픽셀(absolute pixel)을 사용하여 거리나 크기를 정의하는 것입니다. 각 화면은 픽셀 밀도가 서로 다른데 레이아웃 크기를 픽셀로 정의하면 동일한 픽셀 수치가 다른 기기에서 다른 물리적 크기와 대응할 수 있어 문제가 됩니다. 따라서 크기를 지정할 때에는 항상 <code>dp</code> 또는 <code>sp</code> 단위를 사용하시기 바랍니다. <code>dp</code>는 160dpi에서 픽셀의 물리적 크기에 대응하는 밀도 독립형 픽셀(Density Independent Pixel)입니다. <code>sp</code>는 동일한 기본 단위이지만 사용자의 기본 텍스트 크기에 따라 확대/축소될 수 있으므로(배율 독립형 픽셀(Scale Independent Pixel)임) 텍스트 크기를 정의할 때 이 측정 단위를 사용해야 합니다(레이아웃 크기에 사용해서는 안됨).</p> <p>예를 들어 두 개의 보기 사이에 여백을 지정할 때 <code>px</code>가 아닌 <code>dp</code>를 사용합니다.</p> <pre> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/clickme" android:layout_marginTop="20dp" /> </pre> <p>텍스트 크기를 지정할 때에는 항상 <code>sp</code>를 사용합니다.</p> <pre> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="20sp" /> </pre> <h2 id="TaskProvideAltBmp">대체 비트맵 제공</h2> <p>Android는 화면 밀도가 다양한 기기에서 실행되므로 각각의 일반화된 밀도 종류(저, 중, 고 및 초고 밀도)에 맞춤화된 비트맵 리소스를 제공해야 합니다. 이렇게 하면 모든 화면 밀도에서 좋은 그래픽 품질 및 성능을 얻는데 도움이 됩니다.</p> <p>이러한 이미지를 생성하려면 벡터 형식의 원본 리소스부터 시작해야 하며 다음 크기 배율을 사용하여 각 밀도에 사용할 이미지를 생성해야 합니다.</p> <p><ul> <li><code>xhdpi</code>: 2.0 <li><code>hdpi</code>: 1.5 <li><code>mdpi</code>: 1.0 (기선) <li><code>ldpi</code>: 0.75 </ul></p> <p>즉 <code>xhdpi</code> 기기에 대해 200x200 이미지를 생성하는 경우 <code>hdpi</code> 기기에 대해 동일한 리소스를 150x150으로 생성해야 하며 <code>mdpi</code> 기기에 대해서는 100x100, <code>ldpi</code> 기기에 대해서는 75x75으로 동일한 리소스를 생성해야 합니다.</p> <p>그런 다음 생성된 이미지 파일을 <code>res/</code> 아래의 적절한 하위 디렉토리에 배치하면 시스템에서 애플리케이션이 실행되는 기기의 화면 밀도에 따라 정확한 이미지 파일을 자동으로 선택합니다.</p> <pre class="classic no-pretty-print"> MyProject/ res/ drawable-xhdpi/ awesomeimage.png drawable-hdpi/ awesomeimage.png drawable-mdpi/ awesomeimage.png drawable-ldpi/ awesomeimage.png </pre> <p>그런 다음 언제든지 <code>@drawable/awesomeimage</code>를 참조하면 시스템이 화면의 dpi에 따라 적합한 비트맵을 선택합니다.</p> <p>애플리케이션에 사용할 아이콘 저작물 제작에 대한 자세한 도움말 및 가이드라인은 <a href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">아이콘 디자인 가이드라인</a>을 참조하세요.</p>