[Android] 4(3). 리소스 다루기
리소스 다루기
이번 포스팅에서는 이미지 리소스인 drawable에 대해 조금 더 자세하게 알아보고 앱 아이콘에 사용되는 mipmap, 그리고 strings를 이용한 다국어 처리에 대해 알아보겠습니다.
drawable과 단위
안드로이드는 스마트폰마다 가로세로 화소(픽셀)의 개수가 다르기 때문에 사이즈를 표시하는 단위로 가상 화소 개념인 dp를 사용합니다. dp는 화면 밀도인 DPI 에 따라서 실제 픽셀로 변환되는 크기가 달라지는데, drawble 또한 DPI에 따라서 서로 다른 이름의 디렉터리를 사용합니다.
DPI
가로세로 1인치(2.54cm)에 들어있는 픽셀의 숫자.
안드로이드는 기본으로 160DPI를 사용하며 이를 mdpi라고 합니다.
현재(2021년 기준)는 xxxhdpi까지 지원하는 스마트폰이 나왔으며, 이는 1인치 정사각형 안에 무려 640개의 화소로 화면 밀도가 높기 때문에 화질이 더 선명합니다.
표현 | 1인치 안의 화소수 | 비고 |
---|---|---|
ldpi | 120 | 사용하지 않음 |
mdpi | 160 | 기준: 1dp = 1 pixel |
hdpi | 240 | |
xhdpi | 320 | 1dp = 2 pixel |
xxhdpi | 480 | 1dp = 3 pixel |
xxxhdpi | 640 | 1dp = 4 pixel |
dp
해상도와 관계없이 동일한 크기로 화면에 표시하는 안드로이드의 독립적 수치 단위.
스마트폰의 화소 차이와 상관없이 같은 크기로 보이도록 합니다.
sp
줌인이나 줌아웃 시에 다른 위젯에 영향을 주지 않고 해당 위젯의 글자만 독립적으로 커지거나 작아지게 할 때 사용하는 상대적인 단위.
문자열의 크기를 나타낼 때 사용합니다.
drawable 디렉터리 구성
현업에서는 스마트폰들의 DPI 차이로 인해 여러 종류의 drawable 디렉터리(drawable-mdpi, drawable-xxxhdpi 등)를 만들고 각각의 해상도에 맞는 이미지를 저장해서 사용합니다.
DPI별 디렉터리를 수동으로 생성하려면 Project 뷰에서 res 디렉터리를 마우스 우클릭하면 나타나는 메뉴에서 [New] - [Directory] 를 선택하고 이름을 입력하면 됩니다.
각각의 drawable 디렉터리에 저장된 이미지는 소스 코드나 레이아웃 파일에서는 그냥 기존처럼 파일이름, car.png를 호출해서 사용하고, 안드로이드는 호출된 car.png의 이름을 확인한 후 스마트폰의 해상도에 맞는 디렉터리 안에 있는 car.png를 선택해서 화면에 그려줍니다.
이처럼 앱을 개발할 때는 동일한 이미지를 최소 5개의 해상도로 만들어서 사용합니다.
같은 원리로 drawable-v24 디렉터리에 있는 이미지는 안드로이드 디바이스의 버전이 24 이상일 때 자동으로 선택됩니다. 뒤에 아무런 접미사가 없는 drawable 디렉터리는 이미지 외에 화면과 관련된 XML 파일을 관리하는 용도로 사용됩니다.
✋ 비트맵(Bitmap) vs 벡터(Vector)
비교 | 비트맵 | 벡터 |
---|---|---|
확장자 | PNG, JPG, BMP | SVG, AI |
크기(용량) | 이미지 크기에 따라 증가 | 변화 없음 |
표현 | 사진과 같은 정밀한 표현 | 도형과 같은 수치화된 표현 |
확대 | 확대 시 깨짐 | 확대해도 동일함 |
용도 | 사진 | 아이콘 |
mipmap 앱 아이콘 사용하기
mipmap
mipmap 디렉터리는 앱 아이콘 관리용으로 사용하는 디렉터리로, 일반 이미지는 drawable에 넣고 사용해야 합니다.
mipmap은 따로 생성하지 않아도 5개의 dpi별 디렉터리가 기본으로 제공됩니다.
안드로이드 버전 26부터는 아이콘에 백그라운드, 포어그라운드 개념이 도입되면서 mipmap-anydpi-v26 디렉터리가 추가되었습니다. 각각의 디렉터리에 아이콘 이미지를 넣고 AndroidManifest.xml 에 있는 < application > 태그의 icon 속성에 설정하면 앱 설치 후 안드로이드 화면에 나타납니다.
roundIcon 속성은 버전 25부터 지원한 속성으로 안드로이드 런처가 동그란 이이콘을 사용하면 해당 속성에 지정된 mipmap 이미지를 사용합니다.
adaptive icon
mipmap-anydpi-v26 디렉터리 안에 있는 ic_launcher.xml 파일 안에는 다음과 같은 XML 코드가 있는데, 이는 백그라운드 이미지와 포어그라운드 이미지 2개를 포개어서 아이콘으로 그려주는 역할을 합니다.
< background > 태그값에 @drawable/ic_launcher_background 파일명이 지정되어 있는데, 이 파일에 앞서 설명한 벡터 기반의 이미지가 입력되어 있습니다. 이런 구조를 어댑티브 아이콘이라고 합니다. 이미지 아이콘과 동일하게 AndroidManifest.xml에 있는 < application > 태그의 icon 속성에 적용하고 사용합니다.
strings와 다국어 처리
strings 다루기
문자열을 저장하는 strings.xml 파일에서는 [Code] 모드에서 직접 문자열을 추가/삭제할 수도 있지만 [Open editor]를 클릭하여 Translation editor에서 [+]/[-] 버튼으로 간단하게 할 수도 있습니다.
다국어 처리하기
Translation editor의 원래 기능은 다국어를 처리하는 데 있습니다.
앱 사용자가 자신의 모국어에 맞는 문자를 볼 수 있도록 설정하는 것이죠.
Translation editor에서 지구본 모양을 클릭하면 여러 국가의 언어를 선택할 수 있습니다. 언어를 선택하게 되면 기존 strings 목록의 컬럼에 그 언어가 추가되는데, 이를 이용해 하나의 문자열을 언어 별로 다르게 설정할 수 있습니다.
다음 예시를 보시죠.
👍 예시
- Translation editor에서 korean (ko)를 선택하여 한국어를 추가합니다.
-
추가하고 나면 strings 목록에 한국어가 추가되고, 좌측의 탐색기에는 values-ko라고 되어있는 파일 안에 strings.xml 파일이 생성됩니다.
-
새로 생긴 Korean(ko)에 한국어를 입력하고 strings.xml (ko) 파일에 원본 strings.xml에 있는 Key와 같은 Key로 된 < string > 태그에 한글 Value가 입력되어 있습니다.
이렇게 Translations Editor를 이용해서 국가별 strings.xml 파일이 구성되어 있는 앱을 스마트폰에 설치하면, 해당 스마트폰의 언어 설정에 맞는 strings.xml 의 값을 사용해서 화면에 문자를 세팅합니다. 만약 구성에 없는 언어 설정일 경우 기본으로 제공되는 strings.xml 의 값이 사용됩니다.
✋ 실제 앱 개발 시에는 Translations Editor를 사용하는 경우는 드뭅니다. 대부분 다국어가 들어가 있는 DB나 엑셀 형태의 Sheet를 사용해서 한꺼번에 입력한 후, 코드로 각각의 strings.xml 을 생성해서 사용합니다.
정리
- drawable 디렉터리에는 이미지 리소스들을 저장하며, DPI 별 폴더를 따로 만드는 것이 좋습니다.
- mipmap 디렉터리에는 아이콘 리소스들을 저장하며, DPI 별 폴더들이 이미 만들어져 있습니다. 각각의 디렉터리에 아이콘 이미지를 넣고 AndroidManifest.xml 에 있는 < application > 태그의 icon 속성에 설정하면 앱 설치 후 안드로이드 화면에 나타납니다.
- strings.xml 파일은 문자열을 관리하는 파일이며, Translations Editor를 이용하여 각 국가별 파일들을 따로 만들어두면 그 국가에서 앱 이용 시 미리 지정한 문자로 세팅합니다.
Leave a comment