애플리케이션에서 사용하는 다양한 미디어 파일, 데이터 파일 등을 리소스 파일이라고 부른다.
안드로이드는 리소스 파일들을 res 폴더를 통해 관리한다.
안드로이드는 이미지와 xml 파일을 리소스로 관리하며 xml 파일을 안드로이드에서 정의한 데이터들을 관리하는 용도로 사용한다.
xml 파일로 관리되는 데이터들은 언어, 크기 등에 따라 단말기에 대응할 수 있도록 처리할 수도 있다.
문자열, 문자열 배열을 xml에 등록해서 사용할 수 있다.
다국어 지원을 위해 사용한다.
res 에서 적용하기
// 둘 다 가능
var str1 = getString(R.string.str1)
textView.setText(R.string.str1)
문자열 포멧팅
<!-- 문자열 : %s, 정수 : %d, 실수 : %f, 그 외 : %s -->
<string name="str3">이름은 %s이고, 나이는 %d살 입니다</string>
val str1 = getString(R.string.str3)
// % 부분에 값을 설정하여 문자열을 완성한다.
val str2 = String.format(str1, "홍길동", 30)
문자열 배열
<!-- 문자열 배열 -->
<string-array name="str4_array">
<item>항목1</item>
<item>항목2</item>
<item>항목3</item>
<item>항목4</item>
<item>항목5</item>
</string-array>
val str4Array = resources.getStringArray(R.array.str4_array)
textView.text = ""
for(str1 in str4Array){
textView.append("{$str1}\n")
}
색상을 xml에 등록해서 사용할 수 있다.
안드로이드는 단말기 제조사가 자신의 단말기에 안드로이드 OS를 넣게 된다.
이 때, 단말기마다 지원하는 색상, 처리 방식 등이 달라 원하는 색상이 나오지 않을 수도 있는데 이 처리를 안드로이드 OS가 해줄 수 있게 된다.
// RGB지정 (R - RED, G - Green, B - Blue, 빛의 삼원색)
val c1 = Color.rgb(227, 30, 89)
textView.setTextColor(c1)
// ARGB 지정(A - alpha, R - Red, G - Green, B - Blue, 투명색과 빛의 삼원색)
val c2 = Color.argb(50, 227, 30, 89)
textView.setTextColor(c2)
// context가 제공하는 메서드를 통해 색상값을 가져온다.
val c3 = getColor(R.color.color1)
textView.setTextColor(c3)
크기를 xml에 등록해서 사용할 수 있다.
모든 디스플레이 장비는 px 이라는 단위로 크기 등을 결정하게 된다.
안드로이드는 다양한 단말기 때문에 px을 사용하면 크기가 다르게 나타날 수 있다.
안드로이드는 가변형 단위들을 제공한다.
안드로이드는 drawable 폴더에 이미지를 넣어서 이미지를 사용할 수 있다.
이 때 xml 통해 이미지를 새롭게 구성하여 사용할 수 있다.
여러 이미지를 겹쳐 하나의 이미지를 만들 때
패턴 이미지를 만들 때
상태에 따른 이미지를 만들 때
기타 등등
아이콘
현재 안드로이드는 이미지를 넣는 폴더로 drawable과 mipmap을 제공한다.
mipmap 은 애플리케이션의 아이콘으로 사용할 이미지를 넣는 곳이고 drawable은 애플리케이션 내에서 사용할 이미지를 넣은 곳이다.
두 폴더의 차이는 뒤에서 살펴본다.
두 클래스 모두 이미지 데이터를 관리하는 클래스이다.
Bitmap은 jpg, png, gif 파일로 부터 읽어온 이미지 데이터를 관리하는 객체이다.
Drawable 은 Bitmap을 포함하여 xml 파일을 통해 만든 이미지, 코드를 통해 만든 이미지 등도 포함한다. Drawable은 안드로이드에서 화면이 그릴 수 있는 요소들을 모두 포함한다.
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/p"
android:tileMode="repeat"/>
<item>
<bitmap android:src="@drawable/img1" android:gravity="center"/>
</item>
<item android:top="10dp" android:left="10dp" android:gravity="center">
<bitmap android:src="@drawable/img2"/>
</item>
<item android:top="20dp" android:left="20dp" android:gravity="center">
<bitmap android:src="@drawable/img3"/>
</item>
<!-- 버튼을 누른 상태 -->
<item android:state_pressed="true" android:drawable="@drawable/btn1"/>
<!-- 그 외의 모든 상태 -->
<item android:drawable="@drawable/btn2"/>
<!-- oneshot : true를 설정해주면 반복되지 않는다. -->
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true">
<!-- drawable : 보여줄 이미지 -->
<!-- duration : 현재 이미지를 보여줄 시간 -->
<item android:drawable="@drawable/ani_img1" android:duration="100"/>
<item android:drawable="@drawable/ani_img2" android:duration="100"/>
<item android:drawable="@drawable/ani_img3" android:duration="100"/>
<item android:drawable="@drawable/ani_img4" android:duration="100"/>
<item android:drawable="@drawable/ani_img5" android:duration="100"/>
<item android:drawable="@drawable/ani_img6" android:duration="100"/>
<item android:drawable="@drawable/ani_img7" android:duration="100"/>
<item android:drawable="@drawable/ani_img8" android:duration="100"/>
</animation-list>