본문 바로가기
X

앱 개발 방법 - 앱 리소스 (대체 리소스 [구성 한정자 이름])

by green post it 2022. 1. 5.
반응형

안드로이드 프로그래밍

구성 한정자 이름


  • MCC 및 MNC [예 : mcc310, mcc310-mnc004, mcc208-mnc00 등]

이동통신 국가 코드(MCC)에 선택적으로 이동통신 네트워크 코드(MNC)가 이어지는 현태로 기기의 SIM 카드에서 가져옵니다.

예를 들어 mcc310은 모든 이동 통신사를 포함한 미국이고 mcc310-mnc004는 Verizon을 사용하는 미국 mcc208-mnc00은 Orange를 사용하는 프랑스입니다.

 

기기가 무선 연결(GSM)을 사용할 경우 MCC와 MNC 값은 SIM 카드에서 가져옵니다.

MCC만 단독으로 사용할 수도 있습니다(예를 들어 앱에 국가별 합법적 리소스를 포함하는 경우) 언어에만 기초해서 지정해야 할 경우 언어 및 지역 한정자를 대신 사용합니다.(아래에 설면)

MCC와 MNC 한정자를 사용할 경우 신중하게 사용하고 예상한 대로 작동하는지 테스트해야 합니다.


  • 언어 및 지역 [예:en, fr, en-rUS, fr-rFR, fr-rCA, b+en, b+en+US, b+es+419]

언어는 두 글자의 ISO639-1 언어 코드로 정의되고 뒤이어 두 글자의 ISO3166-1-alpha-2 지역 코드(앞에 소문자'r'이 추가됨)가 선택적으로 따라옵니다.

코드는 대소문자를 구별하지 않습니다.

r 접두어는 지역 부분을 구별하기 위해 사용됩니다.

지역만 지정할 수는 없습니다.

Android 7.0(API 레벨 24)에서 BCP 47 언어 태그에 대한 지원이 추가되었습니다.

이 태그를 사용하여 언어 및 지역별 리소스를 정규화할 수 있습니다.

언어 태그 하나는 하나 이상의 하위 태그 시퀀스로 구성됩니다.

각각의 하위 태그는 전체 태그로 식별되는 언어의 범위를 구체화하거나 좁히는 역할을 합니다.

BCP 47 언어 태그를 사용하려면 b+와 두 글자 ISO 639-1 언어 코드를 결합합니다.

+로 구분한 추가적인 하위 태그를 뒤에 옵션으로 덧붙일 수도 있습니다.

사용자가 시스템 설정에서 언어를 변경하면 앱의 수명 주기가 남아 있는 동안 언언 태그가 변경될 수 있습니다.


  • 레이아웃 방향 [ldrtl, ldltr]

앱의 레이아웃 방향입니다. ldrtl는 "오른쪽에서 왼쪽 방향 레이아웃"을 나타냅니다.

ldltr는 "왼쪽에서 오른쪽 방향 레이아웃"을 나타내고 기본 암시적 값입니다.

이는 레이아웃이나 드로어블 값 등의 모든 리소스에 적용할 수 있습니다.

예를 들어 아랍어에 대한 특정 레이아웃을 제공하고 다른 "오른쪽에서 왼쪽으로 쓰는"언어(히브리어 또는 페르시아어)에 제네릭 레이아웃을 제공하고 싶다면 다음과 같이 해야 합니다.

res/
    layout/
        main.xml (Default layout)
    layout-ar/
        main.xml (Specific layout for Arabic)
    layout-ldrtl/
        main.xml (Any "right-to-left" language, except
                  for Arabic, because the "ar" language qualifier
                  has a higher precedence.)


API 레벨 17에서 추가되었습니다.


  • smallesWidth [swdp, 예:sw320dp, sw600dp, sw720dp 등]

화면의 기본 크기로 사용 가능한 화면 영역의 가장 짧은 치수로 나타냅니다.

구체적으로 기기의 smallestWidth는 해당 화면의 이용 가능한 높이와 너비의 가장 짧은 치수를 말합니다.(이것을 화면에 대한 '가능한 한 가장 좁은 너비'로 생각해도 됩니다.) 이 한정자를 사용하면 화면의 현재 방향에 관계없이 해당 UI에 사용 가능한 너비 중 최소 dp를 앱에 확보할 수 있습니다.

예를 들어 언제나 최소 600dp에서 치수의 화면 공가이 레이아웃에 필요한 경우 이 한정자를 사용하여 레이아웃 리소스 res/layout-sw600dp/를 만들 수 있습니다.

시스템은 사용 가능한 화면의 최소 치수가 600dp인 경우에만 이런 리소스를 사용하고 이때 사용자 쪽에서 600dp가 높이 이든 너비 이든 관계없습니다.

이 최소 너비는 기기의 고정된 화면 크기 특성입니다.

기기의 최소 너비는 화면 방향이 변경되어도 바뀌지 않습니다.

레이아웃 디아진에서 흔히 너비가 구동 인자로 사용되므로 최소 너비를 사용하여 일반 화면 크기를 결정하는 방법이 유용합니다.

대개 UI는 세로로 스크롤되지만 가로로 스크롤될 경우 최소 공간에 대한 제약이 상당합니다.

핸드셋용 단일 창 레이아웃을 사용할지 태블릿용 다중 창 레이아웃을 사용할지 여부를 결정할 때는 사용 가능한 너비도 중한 요소입니다.

따라서 아마도 여러분이 가장 신경 스는 것은 각 기기에서 사용 가능한 최소 너비일 것입니다.

기기의 최소 너비는 화면 장식과 시스템 UI를 감안합니다.

예를 들어 화면상에서 최소 너비의 축 주변 공간을 차지하는 영국 UI 요소가 있다면 시스템은 최소 너비를 실제 화면 크기보다 작게 선언합니다.

이것은 개발자의 UI가 사용할 수 없는 화면 픽셀이기 때문입니다.

다음과 같은 일부 값은 일반적인 화면 크기에 사용할 수 있습니다.

화면 크기 320에 화면 구성이 아래와 같은 기기

  • 화면 크기 320에 화면 구성이 아래와 같은 기기:
    • 240x320ldpi(QVGA 핸드셋)
    • 320x480mdpi(핸드셋)
    • 480x800hdpi(고화질 핸드셋)
  • 480x800mdpi(태블릿/핸드셋) 등의 화면에는 480을 사용합니다.
  • 600x1024mdpi (7인치 태블릿) 등의 화면에는 600을 사용합니다.
  • 720x1280mdpi(10인치 태블릿) 등의 화면에는 720을 사용합니다.

앱이 smallestWidth 한정자의 여러 값이 포함된 여러 개의 리소스 디렉토리를 제공하면 시스템은 기기의 smallestWidth에 가장 가깝지만 이를 초과하지 않는 값을 사용합니다.

API 레벨 13에서 추가되었습니다.


  • 이용 가능한 너비 [wdp, 예:w720dp, w1024dp 등]

리소스를 사용해야 하는 dp단위에서는 최소 이용 가능한 화면 너비를 지정합니다.

이는 값으로 정의됩니다.

이 구성 값은 현재 실베 너비에 맞추기 위해 화면 방향이 가로와 세로 사이를 오가며 바뀔 때 변경됩니다.

대개 이 방법은 다중 창 레이아웃의 사용 여부를 결정할 때 유용합니다.

아무리 태블릿 기기라고 해도 가로 모드와 세로 모드 방향에 동일한 다중 창 레이아웃을 원하지는 않을 것입니다.

따라서 이 방법을 사용하면 화면 크기와 방향 한정자를 함께 사용하는 대신 레이아웃에 필요한 최소 너비를 지정할 수 있습니다.

앱이 이 구성에 대해서 서로 다른 값이 포함된 여러 개의 리소스 디렉토리를 제공하면 시스템은 기기의 현재 화면 너비에 가장 가깝지만 이를 초과하지 않는 값을 사용합니다.

이 값은 화면 장식을 감안한 것이므로 기기의 왼쪽이나 오른쪽 가장자리에 영구 UI 요소가 있을 영우 기기는 이러한 UI 요소를 감안하여 앱의 이용 가능한 공간을 줄이고 실제 화면 크기보다 작은 너비 값을 사용합니다.

API 레벨 13에서 추가되었습니다.


  • 이용 가능한 높이 [hdp, 예: h720dp, h1024dp 등]

리소스가 사용되어야 하는 최소한의 사용 가능한 화면 높이를 "dp"단위로 나타냅니다. 이는 값이 정의합니다. 이 구성 값은 현재 실제 높이에 맞추기 위해 화면 방향이 가로와 세로 사이를 오가며 바뀔 때 변경됩니다.

 


이 방법을 사용하며 레이아웃에 필요한 높이를 정의하는 것은 화면 크기와 방향 한정자를 함께 사용하는 대신 wdp를 사용하여 필요한 너비를 정의하는 것과 마찬가지로 유용한 방법입니다.

 

그러나 대개 UI 세로로 스크롤되므로 너비는 다소 경직적인 데 반해 사용 가능한 높이에는 좀 더 유연성이 있다는 점을 고려하면 대부부의 앱에는 이 한정자가 필요 없습니다.

 


앱이 이 구성에 대해 서로 다른 값이 포함된 여러 개의 리소스 디렉토리를 제공하면 시스템은 기기의 현재 화면 높이에 가장 가깝지만 이를 초과하지 않는 값을 사용합니다.

 

이 값은 화면 장식을 감안한 것이므로 기기의 상단이나 하단 가장자리에 영구 UI 요소가 있을 경우 기기는 이러한 UI 요소를 감안하여 앱의 이용 가능한 공간을 줄여서 실제 화면 크기보다 작은 높이 값을 사용합니다.

 

상태 표시줄에 고정되지 않은 화면 장식(예를 들어 전화 상태 표시줄은 전체 화면에서 숨길 수 있음)은 여기서 감안하지 않았고 제목 표시줄이나 작업 모음 등의 창 장식도 감안하지 않았으므로 앱은 지정된 것보다 어느 정도 공간이 작아질 것에 대비해야 합니다.

API 레벨 13에서 추가되었습니다.


  • 화면 크기 [small, normal, large, xlarge]

small : 저밀도 QVGA 화면과 비슷한 크기의 화면입니다.

작은 화면의 최소 레이아웃 크기는 약 320x426dp 단위입니다. 이 화면의 예시로는 QVGA 저밀도 및 VGA 고밀도가 있습니다.

normal : 중밀도 HVGA 화면과 비슷한 크기의 화면입니다. 정상 화면의 최소 레이아웃 크기는 약 320x470dp 단위입니다. 이 화면의 예시로는 WQVGA 저밀도, HVGA 중밀도, WVGA 고밀도 등이 있습니다.

large : 중밀도 VGA 화면과 비슷한 크기의 화면입니다. 큰 화면의 최소 레이아웃 크기는 약 480x640dp 단위입니다. 이 화면의 예시로는 VGA 및 WVGA 중밀도 화면이 있습니다.

xlarge : 일반적인 중밀도 HVGA 화면보다 상당히 큰 화면을 말합니다. 초대형 화면의 최소 레이아웃 크기는 약 720x690dp 단위입니다.

대부분의 경우 초대형 화면 기기는 주머니에 넣어 다니기에 너무 큽니다. 따라서 태블릿 스타일의 기기일 가능성이 높습니다.

API 레벨 9에서 추가되었습니다.

참고:크기 한정자를 사용하더라도 해당 리소스가 그 크기의 화면 전용이라는 뜻은 아닙니다.

현재 기기 구성과 더욱 잘 맞는 한정자가 포함된 대체 리소스를 제공하지 않으면 시스템이 가장 가깝게 일치하는 리소스를 사용합니다.

주의:모든 리소스가 현재 화면보다 큰 크기 한정자를 사용하는 경우 시스템은 리소스를 사용하지 않으며 앱은 런타임에 작동이 중단됩니다.(예:모든 레이아웃 리소스에 xlarge 한정자가 태그로 지정되어 있지만 기기는 일반 크기 화면일 경우).

API 레벨 4에서 추가되었습니다.


  • 화면 비율 [long, notlong]

long:WQVGA, WVGA, FVGA 등의 긴 화면
notlong:QVGA, HVGA 및 VGA 등의 길지 않은 화면

API 레벨 4에서 추가되었습니다.

이것은 순전히 화면 비율에만 기초합니다.("긴"화면이 더 넓습니다. 화면 방향과는 관계가 없습니다.


  • 원형 화면 [round, notround]

round : 원형 화면(예:원형 웨어러블 기기)
notround : 사각형 화면(예:전화 또는 태블릿)

API 레벨 23에서 추가되었습니다.


  • 넓은 색 공간 [widecg, nowidecg]

{@code widecg}: Display P3, AdobeRGB 등과 같은 넓은 색 공간으로 표시합니다.
{@code nowidecg}: sRGB와 같은 좁은 색 공간으로 표시합니다.

API 레벨 26에서 추가되었습니다.


  • HDR(High Dynamic Range)  [highdr, lowdr]

{@code highdr}: 높은 동적 범위로 표시합니다.
{@code lowdr}: 낮은/표준 동적 범위로 표시합니다.

API 레벨 26에서 추가되었습니다.


  • 화면 방향 [port, land]

port : 기기가 세로 방향(수직)입니다.
land : 기기가 가로 방향(수평)입니다.

사용자가 화면을 돌리는 경우 앱 수명 중에 화면 방향이 변경될 수 있습니다.


  • UI 모드 [car, desk, television, appliance, watch, vrheadset]

car : 기기가 차량용 도크에서 표시되고 있습니다.
desk : 기기가 데스크용 도크에서 표시되고 있습니다.
television : 기기가 텔레비전에서 표시되고 있으며 UI가 큰 화면에 있고 사용자가 여기에서 멀리 떨어져 있는 "텐 풋(ten foot)" 환경을 제공하고 있습니다. 이는 주로 DPAD 또는 기타 비-포인터 상호작용 주변을 가리킵니다.
appliance : 기기가 가전제품 역할을 하고 있으며, 디스플레이 화면이 없습니다.
watch : 기기에 디스플레이 화면이 있고 손목에 착용합니다.
vrheadset : 기기가 가상현실 헤드셋에서 표시됩니다.

API 레벨 8에서 추가되었고 텔레비전은 API 13에서 시계는 API 20에서 추가되었습니다.

UI 모드는 사용자가 기기를 도크에 놓는 경우 앱 수명 중에 변경될 수 있습니다. 이러한 모드 중 일부는 UiModeManager를 사용하여 활성화 또는 비활성화할 수 있습니다.


  • 야간 모드 [night, notnight]

night : 야간
notnight : 주간

API 레벨 8에서 추가되었습니다.

야간모드가 자동 모드인 상태(기본)로 설정되어 있으면 맵의 수명 중에 모드가 변경될 수 있습니다. 이 경우 하루 중 시간대를 기반으로 변경됩니다. 이 모드는 UiModeManager를 사용하여 활성화 또는 비활성화할 수 있습니다.


  • 화면 픽셀 밀도(dpi)

ldpi : 저밀도 화면 약 120dpi

mdpi : 중밀도(일반적인 HVGA에서) 화면 약 160dpi

hdpi : 고밀도 화면 약 240dpi

xhdpi : 초고밀도 화면 약 320dpi API 레벨 8에서 추가되었습니다.

xxhdpi : 슈퍼 초고밀도 화면 약 480dpi API 레벨 16에서 추가되었습니다.

xxxhdpi : 울트라 슈퍼 초고밀도 화면 사용(런처 아이콘만 해당, 다중 화면 지원의 참고 참조) 약 640dpi. API 레벨 18에서 추가되었습니다.

nodpi : 기기 밀도에 일치하도록 크기를 조정하지 않을 비트맵 리소스에 사용할 수 있습니다.

 

tvdpi : mdpi와 hdpi 사이 어딘가에 해당되는 화면 약 213dpi. "기본" 밀도 그룹으로 간주되지 않습니다.

이는 대체로 텔레비전용으로 만들어진 것이므로 대부분의 앱에는 필요하지 않습니다.

대부분의 앱에는 mdpi 및 hdpi 리소스 제공만으로 충분하고 시스템에서 필요에 따라 리소스를 확대/축소합니다.

API 레벨 13에서 추가되었습니다.

 

anydpi : 이 한정자는 모든 화면 밀도와 일치하고 다른 한정자보다 우선합니다. 벡터 드로어블에 유용합니다. API 레벨 21에서 추가되었습니다.

nnndpi : 표준이 아닌 밀도를 표현하는 데 사용합니다. nnn는 양의 정수 화면 밀도입니다. 대부분의 경우에는 사용해서는 안 됩니다. 표준 밀도 범위를 사용하세요. 현재 업계에서 사용되고 있는 다양한 기기 화면 밀도를 지원하는 부담이 크게 감소합니다.

여섯 가지 기본 밀도의 비율 척도는 3:4:6:8:12:16입니다(tvdpi 밀도는 무시). 그러므로 ldpi의 9x9 비트맵은 mdpi에서 12x12이고, hdpi에서 18x18, xhdpi에서 24x24와 같은 방식으로 적용됩니다.

이미지 리소스가 텔레비전이나 특정 기기에서 제대로 보이지 않는다고 생각해서 tvdpi 리소스를 사용하려 할 경우, 배율은 1.33*mdpi입니다. 예를 들어 mdpi 화면의 100px x 100px 이미지는 tvdpi에서 133px x 133px이 되어야 합니다.

참고: 밀도 한정자를 사용하더라도 해당 리소스가 그 밀도의 화면 전용이라는 뜻은 아닙니다. 현재 기기 구성과 더욱 잘 맞는 한정자가 포함된 대체 리소스를 제공하지 않으면 시스템이 가장 가깝게 일치하는 리소스를 사용합니다.


  • 터치스크린 유형 [notouch, finger]

notouch: 기기에 터치스크린이 없습니다.

finger: 기기에 터치 스크린이 있으며 이를 사용자의 손가락을 사용한 방향 지시 상호작용을 통해 쓰도록 되어 있습니다.


  • 키보드 가용성 [keysexposed, keyshidden, keyssoft]

keysexposed: 기기에서 키보드를 사용할 수 있습니다. 키보드에 소프트웨어 키보드가 활성화되어 있으면(이럴 가능성이 큽니다) 하드웨어 키보드가 사용자에게 노출되어 있지 않거나 기기에 하드웨어 키보드가 없더라도 이 리소스를 사용할 수 있습니다.

소프트웨어 키보드가 제공되어 있지 않거나 비활성화되어 있는 경우 하드웨어 키보드가 노출되어 있을 때에만 사용할 수 있습니다.

keyshidden: 기기에서 하드웨어 키보드를 사용할 수 있지만 숨겨져 있고 이에 더하여 기기에 소프트웨어 키보드가 활성화되어 있지 않습니다.

keyssoft: 기기에 활성화된 소프트웨어 키보드가 있습니다(표시 여부는 무관).

keysexposed 리소스를 제공하지만 keyssoft 리소스는 제공하지 않는다면, 시스템은 소프트웨어 키보드가 활성화되어 있는 동안은 키보드가 보이는지 여부와 관계없이 keysexposed 리소스를 사용합니다. 이는 사용자가 하드웨어 키보드를 여는 경우 앱 수명 중에 변경될 수 있습니다.


  • 기본 텍스트 입력 방법  [nokeys, qwerty, 12key]

nokeys : 기기에 텍스트 입력을 위한 하드웨어 키가 없습니다.

qwerty : 기기에 하드웨어 쿼티 키보드가 있습니다(이것이 사용자에게 표시되는지 여부는 무관).

12key : 기기에 하드웨어 12키 키보드가 있습니다(이것이 사용자에게 표시되는지 여부는 무관).


  • 탐색 키 가용성 [navexposed, navhidden]

navexposed: 사용자가 탐색 키를 사용할 수 있습니다.

navhidden: 탐색 키를 사용할 수 없습니다(예: 닫힌 뚜껑 뒤에 있는 경우).

이는 사용자가 탐색 키를 드러내는 경우 앱 수명 중에 변경될 수 있습니다. 


  • 기본 비터치 탐색 방법 [nonav, dpad, trackball, wheel]

nonav: 기기에 터치 스크린을 제외하고 다른 탐색 기능이 없습니다.

dpad: 기기에 탐색용 방향 패드(D-패드)가 있습니다.

trackball: 기기에 탐색용 트랙볼이 있습니다.

wheel: 기기에 탐색용 방향 휠이 있습니다.(드문 경우임)


  • 플랫폼 버전(API 레벨) [예: v3, v4, v7 등]

기기에서 지원하는 API 레벨입니다. 예를 들어, v1은 API 레벨 1용이고(Android 1.0 이상 기기) v4는 API 레벨 4용(Android1.6 이상 기기)입니다.


일부 구성 한정자는 Android 1.0 이후부터 추가되었으므로 모든 Android 버전이 모든 한정자를 지원하는 것은 아닙니다.새로운 한정자를 사용하면 암묵적으로 플랫폼 버전 한정자도 추가하므로 구형 기기가 이를 무시하게 됩니다.

 

예를 들어 w600dp 한정자를 사용하면 자동으로 v13 한정자를 포함합니다. 사용 가능한 너비 한정자가 API 레벨 13부터 새로 도입되었기 때문입니다. 애초에 문제를 예방하려면 항상 기본 리소스를 한 세트 포함하세요.(한정자 없는 리소스 한 세트)

안드로이드 한정자는 특정 디바이스 구성을 식별하는 이름이다. 이름에 둘 이상의 한정자가 있을 수 있다.(대시(-)로 구분) 화면 밀도, 화면 크기 및 방향과 같은 다양한 구성으로 이루어져 있다.
반응형