Kotlin에서는 소스코드 파일 이외에 다른 파일은 모두 리소스 파일로 처리합니다. 그리고 이들 리소스 파일은 거의 대부분 프로젝트 디렉터리 구조에서 res 디렉터리 안에 포함됩니다. 이름에서도 알 수 있듯이 리소스와 관련된 파일들이 모여진 디렉터리를 의미합니다.
1. drawable
이미지 파일과 관련된 디렉토리입니다. 그런데 기본적인 drawable 디렉터리 이외에 다음과 같이 다양한 drawable 디렉터리가 존재할 수 있습니다.
Android 앱은 다양한 해상도의 디바이스에서 작동할 수 있고 drawable 디렉토리는 그런 해상도에 맞춰 적절한 이미지가 사용되도록 합니다. 위 화면에는 drawable-hdpi와 drawable-xhdpi가 있는데 디렉토리명에 사용된 dpi는 Dots Per Inch로 1인치 안에 들어가는 픽셀 수를 의미합니다. 당연히 dpi가 높으면 그만큼 고화질임을 의미하며 hdpi는 240개, xhdpi는 320개의 픽셀이 들어갈 수 있음을 의미합니다.
ldpi | 120 |
mdpi | 160 |
hdpi | 240 |
xhdpi | 320 |
xxhdpi | 480 |
xxxhdpi | 640 |
디렉터리를 위와 같이 나누고 각각 해상도에 맞는 이미지를 넣게 되면 앱이 작동하는 스마트폰의 해상도에 따라 각각의 디렉토리에 들어간 이미지가 적절하게 사용됩니다. 예제를 테스트해보기 위해 각각의 디렉터리에 calender.png라는 이미지를 넣어두고 imageView위젯으로 해당 이미지를 표시하도록 해보겠습니다.
imageView위젯을 디자인화면에 배치하면 다음과 같이 이미지를 선택할 수 있는 창이 나타납니다. 이 화면에서 위에서 추가한 calender.png이미지를 선택합니다.
화면 전체를 표시할 수 있도록 위젯을 아래와 같이 배치하고 앱을 실행해 보겠습니다.
아래 화면은 에뮬레이터로 사용된 Pixel 2에서의 실행화면입니다. Pixel 2는 1920x1080의 해상도를 가지고 있으며 화면 표시에 사용된 calender.png이미지는 drawable-xhdpi 디렉터리의 이미지입니다.
이번엔 800x480 해상도를 가진 Nexus 5 입니다.
조금 전과는 달리 다른 이미지가 사용되었으며 해당 이미지는 drawable-hdpi 디렉터리의 calender.png입니다. 보시는 바와 같이 해상도에 따라 각각의 해상도에 맞는 폴더의 이미지 갸 자동적으로 선택돼 사용되고 있음을 알 수 있습니다. 일반적으로는 각각의 해상도에 맞는 디렉터리마다 같은 이미지를 사용하는 게 보통이지만 예제에서는 해상도에 따라 정해진 폴더의 이미지가 사용된다는 점을 보여드리기 위해 일부러 다른 모양의 이미지를 사용하였습니다.
2. mipmap
drawable은 이미지를 다루지만 mipmap은 앱에서 사용되는 아이콘을 다룹니다. mipmap은 drawable과는 달리 임의로 생성하지 않아도 해상도에 따라 각각의 폴더가 만들어져 있습니다. 각 해상도별 폴더의 용도는 drawable과 같습니다.
drawable이나 mipmap이나 이미지 파일을 사용하는건 같지만 용도가 다르니 확실히 구분해서 사용해야 합니다. 각 폴더에 들어간 아이콘 이미지 파일은 AndroidManifast.xml에서 다음과 같이 @mipmap으로 지정되어 있습니다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
위 설정중 ic_launcher_round는 Android Runcher가 원형 아이콘을 사용하는 경우 사용됩니다.
mipmap중 mipmap-anydpi-v26은 백그라운드와 포어그라운드용 이미지 2개를 겹쳐서 아이콘을 표현하고자 하는 것이며 해당 설정은 폴더 안의 ic_launcher.xml파일에 지정되어 있습니다.
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>
3. strings
value폴더안에 있는 color.xml이나 strings.xml파일 등은 이미 아래 글에서 사용해 보았습니다.
2020/08/07 - [Mobile/Kotlin] - [Kotlin] 위젯 - 텍스트뷰(TextView)
여기서 추가적으로 더 알아야할 특별한 것은 없지만 간단히 strings.xml을 통해서 다국어 관련된 설정하는 방법을 살펴보고자 합니다. strings.xml파일을 열어보면 좌측 상단에 'Open editor'라는 걸 볼 수 있는데
이걸 눌러보면 다음과 같이 Translations Editor이라는 화면이 등장하게 됩니다.
strings.xml의 설정은 이 Translations Editor안에서 + 아이콘과 - 아이콘을 통해 추가하거나 삭제가 가능합니다. 여기서 사용해 볼건 그 옆에 지구 모양의 아이콘입니다. 이 아이콘을 눌러보면 다음과 같이 여러 국가를 선택할 수 있는 목록을 볼 수 있습니다.
여기서 korea처럼 특정 국가를 선택하고 나면 다음과 같이 2가지 변화가 생깁니다. 첫번째는 특정 국가의 이니셜이 붙은 새로운 value폴더가 생성된다는 것과 선택한 국가명으로 Translations Editor안에서 새로운 컬럼이 생성된다는 것입니다.
Translations Editor에서 추가된 컬럼에 내용을 입력하고 국가별 value폴더 안의 strings.xml을 열어보면 동일한 내용이 추가되어 있음을 알 수 있습니다.
이런 식으로 영어나 중국어, 일본어등 각 국가에 필요한 언어를 설정한뒤 앱을 실행하면 앱이 실행될 때 해당 스마트폰에 설정된 언어로 문자열을 표시하게 됩니다.
'Mobile > Kotlin' 카테고리의 다른 글
[Kotlin] Spinner (0) | 2020.12.18 |
---|---|
[Kotlin] Activity (0) | 2020.12.18 |
[Kotlin] 위젯 - SeekBar, RatingBar (0) | 2020.12.17 |
[Kotlin] 시작하기 (hello world) (0) | 2020.12.16 |
[Kotlin] 위젯 - CheckBox, ProgressBar (0) | 2020.12.16 |