Android는 다양한 기기에서 실행되며, 이들 기기의 화면 크기와 픽셀 밀도는 다양합니다. 시스템은 다양한 화면에 맞게 사용자 인터페이스를 맞추기 위해 기본적인 배율 조정과 크기 변경을 수행하지만, 각 화면 유형에 맞게 UI가 매끄럽게 표시되도록 하려면 추가적인 작업을 수행해야 합니다.
이 페이지에서는 이러한 주제에 대해 간략히 설명하고 또한 앱이 제대로 표시되도록 도와주는 Android의 여러 기능에 대해 간략히 설명합니다. 다양한 화면에 맞게 앱을 빌드하는 방법에 대한 구체적 지침은 다음 페이지를 참조하세요.
화면 크기
화면 크기는 앱 UI를 표시하기 위해 제공되는 공간입니다. 앱에서 말하는 화면 크기는 기기의 실제 화면 크기가 아닙니다. 화면 크기에는 화면 방향, 시스템 장식(예: 탐색 메뉴), 창 구성 변경사항(예: 사용자가 다중 창 모드를 활성화한 경우)이 고려됩니다.
유연한 레이아웃
기본적으로 Android에서는 현재 화면에 맞게 앱 레이아웃의 크기를 변경합니다. 화면 크기의 미세한 변화에도 레이아웃의 크기가 제대로 변경되도록 하려면, 유연성을 염두에 두고 레이아웃을 구현해야 합니다. 지켜야 하는 핵심 원칙은 UI 구성 요소의 위치와 크기를 하드코딩하지 않는 것입니다. 그 대신, 뷰 크기가 늘어나도록 허용하고 상위 뷰나 기타 동위 뷰에 상대적인 뷰 위치를 지정하는 것입니다. 그러면 레이아웃이 커지더라도 의도했던 순서와 상대적 크기가 동일하게 유지됩니다.
대체 레이아웃
유연한 레이아웃도 매우 중요하지만, 전화와 태블릿 등의 다른 기기에서 사용 가능 공간에 맞게 사용자 환경을 최적화해 주는 다른 레이아웃도 디자인해야 합니다. 그래서 Android에서는 현재 기기의 화면 크기에 따라 런타임에 시스템이 적용하는 대체 레이아웃 파일을 제공할 수 있습니다.
그림 1. 동일한 앱이 다른 화면 크기에 다른 레이아웃을 사용
늘릴 수 있는 이미지
현재 화면에 맞게 레이아웃이 늘어나야 하므로, 모든 레이아웃 뷰에 첨부되는 비트맵도 함께 늘어나야 합니다. 그러나 일반 비트맵을 임의 방향으로 늘리게 되면 이상한 배율의 아티팩트가 나타나고 이미지가 왜곡될 수 있습니다.
이 문제를 해결하기 위해 Android에서는 나인 패치 비트맵을 지원합니다. 이 비트맵에서는 늘릴 수 있는 작은 픽셀 영역을 지정할 수 있으며 이미지의 나머지 영역은 배율이 바뀌지 않고 그대로 유지됩니다.
픽셀 밀도
픽셀 밀도는 화면의 실제 영역 내에 있는 픽셀 수이며 dpi(dots per inch)라고 불립니다. 이 밀도는 화면상의 총 픽셀 수인 해상도와는 다릅니다.
그림 2. 크기는 동일하지만 픽셀 밀도는 다른 두 기기의 과장된 표현
밀도 독립성
다른 픽셀 밀도의 화면에 표시될 때 UI 디자인의 실제 크기가 보존되는 경우(사용자 관점에서), 앱이 "밀도 독립성"을 실현합니다(그림 2 참조). 밀도 독립성을 유지하는 것이 중요하며, 이 독립성이 없다면 UI 요소(예: 버튼)가 저밀도 화면에서 더 크게 나타날 수 있고 고밀도 화면에서 더 작게 나타날 수 있습니다(그 이유는 그림 2에 나타나듯이 픽셀이 더 크면 약간의 픽셀로 더 영향이 클 수 있기 때문입니다).
Android 시스템에서는 밀도 독립성을 실현하도록 돕기 위해 밀도 독립적인 픽셀(dp 또는 dip)을 측정 단위로 제공하며, 픽셀(px) 대신 이것을 사용해야 합니다.
대체 비트맵
이미지가 최상의 상태로 모든 화면에 나타나도록 보장하려면, 각 화면 밀도와 매칭되는 대체 비트맵을 제공해야 합니다. 예를 들어, 앱이 중간 밀도(mdpi) 화면에 대해서만 비트맵을 제공하는 경우 Android는 고밀도 화면에서 이 비트맵을 확대하므로, 화면상에서 이미지가 동일한 실제 공간을 차지합니다. 이 경우 가시적인 배율의 아티팩트가 비트맵에 나타날 수 있습니다. 따라서 더 높은 해상도의 대체 비트맵이 앱에 포함되어야 합니다.
벡터 그래픽
간단한 이미지 유형(대개 아이콘)의 경우, 벡터 그래픽을 사용하면 각 밀도에 대해 별도의 이미지를 만들지 않아도 됩니다. 벡터 그래픽은 픽셀 대신에 기하학적 라인 경로로 그림을 정의하기 때문에 아티팩트의 배율을 바꾸지 않고도 임의 크기로 그릴 수 있습니다.
Wear OS, TV, Auto 및 Chrome OS
위의 권장사항은 모든 Android 폼 팩터에 적용되지만 Wear OS, Android TV, Android Auto 또는 Chrome OS 기기용 앱을 빌드하려는 경우에는 약간의 작업을 더 수행해야 합니다.
이러한 각 기기에는 앱이 수용해야 하는 고유한 사용자 상호작용 모델이 있습니다. 일부 경우(예: Wear OS의 경우)에는 앱의 사용자 환경을 재고하여 해당 기기에 특화된 앱을 빌드해야 합니다. 또한 Chrome OS 기기(예: Google Pixelbook)를 지원하려면, 기존 앱을 약간만 수정하여 키보드/마우스 상호작용과 훨씬 큰 화면을 지원할 수도 있습니다.
이러한 기기를 지원하려면 다음 개발자 가이드를 참조하세요.
화면 비호환성
Android 프레임워크 및 도구는 모든 화면 구성에서 앱이 사용 가능하도록 만드는 데 필요한 모든 것을 제공하지만, 일종의 비호환성으로 인해 일부 화면 구성에서 앱이 사용되지 않도록 결정을 내릴 수도 있습니다.
이 경우 앱이 특정 화면만을 지원하도록 선언할 수 있습니다.