09-2 리소스 조건 설정
리소스 조건 설정이란?
어떤 리소스를 특정 환경에서만 적용되도록 설정하는 것
예를 들어 개발자가 실행 아이콘을 48×48px 크기로 준비했다고 가정
이 앱을 mdpi(medium dots per inch*) 기기에 설치하면 아이콘이 선명하게 보임
mdpi 기기는 실행 아이콘을 48×48px 크기로 출력하며
실제 아이콘도 48×48이므로 선명하게 나옴
*dpi는 기기의 화면 밀도, 즉 화면의 크기를 나타내는 단위임
그런데 똑같은 앱을hdpi(high dots per inch) 기기에 설치한다면
아이콘이 72×72 크기로 나옴
즉, 48×48 크기의 아이콘을 72×72 크기로 늘려서 출력하므로 선명하지 않음
아이콘이 선명하게 나오게 하려면
기기에 맞는 크기로 여러 장 준비해야 함
기기별 실행 아이콘 크기
화면 밀도 | 크기 |
XXXHDPI | 192×192 |
XXHDPI | 144×144 |
XHDPI | 96×96 |
HDPI | 72×72 |
MDPI | 48×48 |
따라서 앱 개발할 때 아이콘이 선명하게 출력되도록
기기 크기별로 이미지를 5개씩 준비함
이미지를 어느 기기의 크기에 적용해야 하는지를 결정해야 함
이때 리소스 조건을 이용할 수 있음
즉, 리소스를 각 기기의 크기에 맞게 적용하는 작업을 코드에서 하지 않고
리소스 조건으로 지정하여 자동으로 환경에 맞게 적용하는 것
리소스 조건 이용하려면
아이콘의 파일명을 똑같이 지정해야 함
모두 ic_launcher.png라는 파일명으로 만들면 R 파일에는 식별자가 하나만 생성됨
→ 코드에서는 각 리소스 구분할 필요 없이 R.mipmap.ic_launcher라고 지정할 수 있음
but 파일명 중복되는 문제 발생
→ 디렉터리를 구분하여 해결함
즉, 이름이 같은 파일을 하나의 디렉터리가 아니라
mipmap-mdpi, mipmap-hdpi처럼 각각의 디렉터리에 담음
이때 리소스 디렉터리 이름에서 붙임표(-) 뒤의 단어가 리소스의 조건임
리소스 조건
조건 | 예시 | 설명 |
MCC 및 MNC | mcc310 mcc310-mcc004 |
이동통신 국가 코드(MCC)와 선택적으로 이동통신 네트워크 코드(MNC) 추가 가능. mcc310은 미국이며 mcc310-mnc004는 버라이즌을 이용하는 미국을 의미 |
언어 및 지역 | en ko-rKR |
ISO639-1 언어 코드이며 선택적으로 뒤에 소문자 r을 추가해 ISO3166-1-alpha-2의 지역 코드가 나올 수 있음 |
레이아웃 방향 | Idrtl Idltr |
히브리어처럼 오른쪽에서 왼쪽으로 쓰는 언어의 레이아웃에서 유용하게 이용 가능. Idrtl은 오른쪽에서 왼쪽, Idltr은 왼쪽에서 오른쪽 방향 레이아웃 |
더 작은 쪽 | sw320dp | 화면 크기 중 더 작은 쪽에 대한 조건. 화면 방향과 상관없이 화면의 높이와 너비 중 작은 쪽에 대한 조건을 의미. sw320dp이면 너비든 높이든 상관없이 작은 쪽의 치수가 320dp인 경우를 의미 |
이용 가능한 너비 | w720dp | 화면 너비에 대한 조건. w720dp이면 너비가 720인 기기 |
이용 가능한 높이 | h720dp | 화면 높이에 대한 조건. h720dp이면 높이가 720인 기기 |
화면 크기 | small, normal, large, xlarge | 화면 크기를 small, normal, large, xlarge로 판단해 조건 명시. small은 320×428, normal은 320×470, large는 480×640, xlarge는 720×960 정도의 크기 |
화면 비율 | long, notlong | 화면의 종횡비 조건. long은 WQVGA, WVGA, FWVGA 등의 긴 화면, notlong은 QVGA, HVGA, VGA 등의 길지 않은 화면 |
원형 화면 | round, notround | 원형 화면인지 판단. round는 웨어러블 기기처럼 둥근 화면을 가지는 기기. notround는 폰이나 태블릿처럼 사각형 화면의 기기 |
화면 방향 | port, land | 화면의 방향에 대한 조건. port는 세로 방향, land는 가로 방향 |
UI 모드 | car, desk, television, application, watch, vrheadset | 기기가 도크에 삽입되거나 제거될 때 대응을 위한 조건. car는 자동차, desk는 데스크, television은 TV, application은 표시되지 않은 제품 |
야간 모드 | night, notnight | 야간 모드에 대응하기 위한 조건. night는 야간, notnight는 주간 |
화면 픽셀 밀도 | Idpi, mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi, nodpi, tvdpi, anydpi, nnndpi |
화면 밀도에 대한 조건. Idpi는 120dpi, mdpi는 160dpi, hdpi는 240dpi, xhdpi는 320dpi, xxhdpi는 480dpi, xxxdpi는 640dpi, nodpi는 크기를 조정하지 않을 리소스에 사용 |
터치 스크린 유형 | notouch, finger | 터치 스크린을 제공하는지 판단. notouch는 터치 스크린이 없는 기기 |
키보드 가용성 | keysexposed, keyshidden, keyssoft |
키보드의 유형. keyssoft는 소프트 키보드, keysexposed는 키보드가 노출되어 있는 기기, keyshidden은 키도브가 있으나 숨길 수 있는 기기 |
기본 텍스트 입력방법 |
nokeys, qwerty, 12key | nokeys는 하드웨어 키보드가 없는 경우, qwerty는 하드웨어 쿼티 키보드가 있는 경우, 12key는 하드웨어 12키가 있는 경우 |
탐색 키 가용성 | navexposed, navhidden | 탐색 키 사용 가능 조건. navexposed는 탐색 키 사용 가능, navhidden은 탐색 키 사용 불가 |
기본 비터치 탐색방법 |
nanav, dpad, trackball, wheel | 터치하지 않고 탐색이 가능한 기기가 있는지 판단 |
플랫폼 버전 | v21 | 기기의 API 레벨 |
화면 회전에 대응하기
스마트폰은 화면을 회전할 수 있는 기기이므로
방향에 따라 화면을 다르게 제공할 수 있음
화면 회전에 대응하려면 가로와 세로 방향일 때
출력할 레이아웃 XML파일을 각각 준비해야 함
but 어느 방향에서 어떤 XML 파일을 출력할지를 지정해야 함
· 세로 방향 레이아웃 XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:src="@drawable/image1" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:src="@drawable/image2" />
</LinearLayout>
· 가로 방향 레이아웃 XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<ImageView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/image1" />
<ImageView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/image2" />
</LinearLayout>
국제 언어 제공하기
· 영어 문자열 리소스 예
<resources>
<string name="app_name">Test9</string>
<string name="intro">Hello</string>
</resources>
· 한국어 문자열 리소스 예
<resources>
<string name="app_name">테스트9</string>
<string name="intro">안녕하세요</string>
</resources>
문자열 리소스는 values 디렉터리의 리소스이므로
식별자는 파일명이 아니라 <string> 태그의 name 값임
따라서 각 파일에 문자열 등록할 때 name값은 똑같아야 함
'Kotlin' 카테고리의 다른 글
[Kotlin / Android] 09. 리소스 활용하기 - 폰 크기의 호환성 (0) | 2024.03.14 |
---|---|
[Kotlin / Android] 09. 리소스 활용하기 - 리소스의 종류와 특징 (1) | 2024.03.11 |
[Kotlin / Android] 08. 사용자 이벤트 처리하기 - 시계 앱의 스톱워치 기능 만들기 (0) | 2024.03.09 |