09-1 리소스의 종류와 특징
리소스(resource)
- 정적인 자원
- 앱 리소스와 플랫폼 리소스로 구분됨
앱 리소스 사용하기
개발자가 직접 추가한 리소스를 의미
개발자는 리소스 디렉터리에 리소스 파일을 각각 만듦
안드로이드 앱의 리소스 종류
디렉터리명 | 리소스 종류 |
animator | 속성 애니메이션 XML |
anim | 트윈 애니메이션 XML |
color | 색상 상태 목록 정의 XML |
drawable | 이미지 리소스 |
mipmap | 앱 실행 아이콘 리소스 |
layout | 레이아웃 XML |
menu | 메뉴 구성 XML |
raw | 원시 형태로 이용되는 리소스 파일 |
values | 단순 값으로 이용되는 리소스 |
xml | 특정 디렉터리가 정의되지 않은 나머지 XML 파일 |
font | 글꼴 리소스 |
리소스 디렉터리명은 고정이며
res 디렉터리 아래에 개발자가 임의로 이름을 붙인 디렉터리를 만들수 없음
하위 디렉터리 역시 추가할 수 없음
리소스 파일명은 values에 추가하는 파일을 제외하고는
모두 자바의 이름 작성 규칙을 지켜야 하며 알파벳 대문자를 사용할 수 없음
why?
리소스 디렉터리와 파일을 코드에서 그대로 사용하지 않고
R 파일에 식별자로 등록해서 이용하기 때문
레이아웃 리소스 - layout 디렉터리
화면을 구성하는 레이아웃 XML 파일을 저장하는 디렉터리
이미지 리소스 - drawable 디렉터리
이미지 리소스를 저장하는 디렉터리
PNG, JPG, GIF, 9.PNG 파일 저장 가능
XML로 작성한 이미지도 저장할 수 있음
· XML로 작성한 이미지
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#FFFF0000"
android:endColor="#80FF00FF"
android:angle="45" />
<corners android:radius="8dp" />
</shape>
XML 파일로 작성했지만 이미지 리소스처럼 ImageView 등에서 이용할 수 있음
· XML 이미지를 사용하는 예
<ImageView
android:layout_width="300dp"
android:layout_height="300dp"
android:src="@drawable/gradient_box" />
실행결과
XML 이미지 태그
태그 | 설명 |
<shape> | 도형을 의미하며 android:shape="rectangle"처럼 shape 속성을 이용해 도형의 타입을 지정. shape값은 rectangle, oval, line, ring 중에서 선택할 수 있음 |
<corners> | 둥근 모서리를 그리는 데 사용. shape값이 rectangle일 때만 적용 |
<gradient> | 그러데이션 색상 지정 |
<size> | 도형의 크기 지정 |
<solid> | 도형의 색상 지정 |
<stroke> | 도형의 윤곽선 지정 |
실행 아이콘 리소스 - mipmap 디렉터리
앱을 기기에 설치하면 나타나는 실행 아이콘의 이미지 리소스가 저장되는 디렉터리
값 리소스 - values 디렉터리
값으로 이용되는 리소스를 저장하는 디렉터리
문자열, 색상, 크기, 스타일, 배열 등의 값을 XML로 저장할 수 있음
activity_main.xml은
리소스를 코드에서는 R.layout.activity_main으로 이용함
values 디렉터리에 있는
문자열 리소스 파일인 strings.xml은 R.values.strings처럼 이용하지 않음
즉, values 디렉터리의 리소스 파일은파일명이 R인 파일에 식별자로 등록되지 않고
리소스 파일에 값을 지정한 태그의 name 속성값이 등록됨
· 문자열 리소스 등록
<resource>
<string name="app_name">Test9</string>
<string name="txt_data1">Hello</string>
<string name="txt_data2">World</string>
</resource>
태그의 name 속성에 지정한 값이 R 파일에 식별자로 기록됨
· XML에서 문자열 리소스 사용
<TextView
andriod:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/txt_data1" />
· 코드에서 문자열 리소스 사용
binding.textView.text = getString(R.string.txt_data2)
values 디렉터리에 저장되는 리소스는 문자열 이외에도 색상, 크기, 스타일 등이 있음
· 색상 리소스 등록
<resources>
<color name="txt_color">#FFF00</color>
<color name="txt_bg_color">#FF0000</color>
</resources>
· 크기 리소스 등록
<resources>
<dimen name="txt_size">20dp</dimen>
</resources>
· XML에서 색상과 크기 리소스 사용
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/txt_data1"
android:textColor="@color/txt_color"
android:background="@color/txt_bg_color"
android:textSize="@dimen/txt_size" />
· 코드에서 색상과 크기 리소스 사용
binding.textView.text = getString(R.string.txt_data2)
binding.textView.setTextColor(ResourcesCompat.getColor(resources, R.color.txt_color, null))
binding.textView.textSize = resources.getDimension(R.dimen.txt_size)
· 스타일 등록
<resources>
<style name="MyTextStyle">
<item name="android:textSize">@dimen/txt_size</item>
<item name="android:textColor">@color/txt_color</item>
</style>
<style name="MyTextStyleSub" parent="MyTextStyle">
<item name="android:textColor">#0000FF</item>
<item name="android:background">@color/txt_bg_color</item>
</style>
</resources>
스타일을 정의할 때는 다른 스타일을 상속받아 재정의할 수 있음
MyTextStyleSub를 뷰에 적용하면 속성 3개가 적용됨
- parent에 명시한 속성 2개를 상속받음
- android:background라는 새로운 속성 추가
- textColor라는 속성 재정의
· 스타일 리소스 사용
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/MyTextStyleSub"
android:text="Hello World" />
색상 리소스 - color 디렉터리
색상 리소스를 등록함
특정 뷰의 상태를 표현하고 그 상태에 적용되는 색상을 등록할 때 사용
· 색상 리소스 등록
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.andriod.com/apk/res/android">
<item android:state_pressed="true"
android:color="#ffff0000" />
<item android:state_focused="true"
android:color="#ff0000ff" />
<item android:color="#ff000000" />
</selector>
· 색상 리소스 사용
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Click Me!!"
android:textColor="@color/button_text" />
글꼴 리소스 - font 디렉터리
글꼴 리소스를 저장함이곳에 TTF나 OTF 파일을 저장한 후 글꼴을 적용할 뷰에서 이용하면 됨
· 글꼴 리소스 사용
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="HelloWorld"
android:textSize="20dp"
android:fontFamily="@font/pacifico" />
실행결과
플랫폼 리소스 사용하기
안드로디으 스튜디오의 프로젝트 탐색 창에서 보기 옵션을
[Packages]로 설정한 후 [Libraries]항목을 살펴보면 확인할 수 있음
플랫폼 리소스는 앱에 있는 리소스가 아니므로
앱의 R 파일이 아니라 android.R이라는 플랫폼 라이브러리의 R 파일에 등록되어 있음
· 코드에서 플랫폼 리소스 사용
binding.imageView.setImageDrawable(ResourcesCompat.getDrawable(resources,
android.R.drawable.alert_dark_frame, null))
binding.textView.text=getString(android.R.string.emptyPhoneNumber)
· XML에서 플랫폼 리소스 사용
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/alert_dark_frame"/>
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@android:string/emptyPhoneNumber"/>
'Kotlin' 카테고리의 다른 글
[Kotlin / Android] 09. 리소스 활용하기 - 리소스 조건 설정 (0) | 2024.03.14 |
---|---|
[Kotlin / Android] 08. 사용자 이벤트 처리하기 - 시계 앱의 스톱워치 기능 만들기 (0) | 2024.03.09 |
[Kotlin / Android] 08. 사용자 이벤트 처리하기 - 뷰 이벤트 (0) | 2024.03.06 |