240105 TIL #287 Android #10 Resource

김춘복·2024년 1월 5일
0

TIL : Today I Learned

목록 보기
287/571

Today I Learned

오늘은 안드로이드 정적 자원인 Resource에 대해 공부했다.


Resource

정적인 자원. 변경되지 않으므로 코드에 작성하지 않고 리소스로 분리해 외부 파일로 만들어 이용할 수 있다.

앱 리소스

개발자가 직접 추가한 리소스

  • 모듈 생성시 아래와 같이 res 폴더에 디렉터리 4개가 생성된다.

  • 안드로이드 리소스 종류
    이 디렉터리명은 고정. 하위 디렉터리나 임의의 디렉터리 불가능. 대문자 불가

디렉터리명리소스 종류
animator속성 애니메이션 XML
anim트윈 애니메이션 XML
color색상 상태 목록 정의 XML
drawable이미지 리소스
mipmap앱 실행 아이콘 리소스
layout레이아웃 XML
menu메뉴 구성 XML
raw원시 형태로 이용되는 리소스 파일
values단순 값으로 이용되는 리소스. string, color, dimen, style
xml특정 디렉터리가 정의되지 않은 나머지 XML 파일
font글꼴 리소스

layout

화면을 구성하는 레이아웃 XML 파일을 저장하는 디렉터리


mipmap

앱 설치시 나타나는 실행 아이콘의 이미지 리소스를 저장하는 디렉터리


font

글꼴 리소스를 저장하는 디렉터리.

  • TTF나 OTF 파일을 저장할 수 있다.

  • android:fontFamily="@font/nanum" 처럼 리소스를 사용할 수 있다.


drawable

이미지 리소스를 저장하는 디렉터리

  • PNG, JPG, GIF, XML(로 작성한 이미지) 파일 저장 가능

  • XML 이미지 태그

태그설명
shape도형의 타입 지정. rectangle, oval, line, ring
corners모서리를 둥글게 할 때 사용. shape 값이 rectangle 일 때만 적용
gradient그라데이션 색상
size도형의 크기
solid도형의 색상
stroke도형의 윤곽선

values

값으로 이용되는 리소스를 저장하는 디렉터리

  • 문자열, 색상, 크기, 스타일, 배열 등의 값을 XML로 저장 가능

  • values는 다른 디렉터리의 파일처럼 R.layout.activity_main 처럼 R로 경로를 사용하지 않는다.

  • 따라서 파일명은 (strings.xml처럼 권장되지만) 자유이고, 대문자도 사용가능하다.


문자열 / 색상 / 크기

  • string 문자열
    name 속성에 지정한 값이 식별자로 기록되어 쓸 수 있다.
<resources>
    <string name="app_name">Ch9_Resource</string>
    <string name="txt_data1">Hello</string>
    <string name="txt_data2">World</string>
</resources>
  • color 색상
<resources>
    <color name="purple_200">#FFBB86FC</color>
    <color name="purple_500">#FF6200EE</color>
    <color name="purple_700">#FF3700B3</color>
    <color name="teal_200">#FF03DAC5</color>
    <color name="teal_700">#FF018786</color>
    <color name="black">#FF000000</color>
    <color name="white">#FFFFFFFF</color>
</resources>
  • dimen 크기
<resources>
	<dimen name="txt_size">20dp</dimen>
</resources>
  • xml에서 사용
<Textview
          android:id="@+id/textview1"
          android:text="@string/txt_data1"/
          android:textColor="@color/txt_color"
          android:textSize="dimen/txt_size"/>
  • 코드에서 사용
binding.textView.text = getString(R.string.txt_data2)
binding.textView.setTextColor(R.color.txt_color)
binding.textView.textSize = resources.getDimension(R.dimen.txt_size)
  • values의 color 태그로 등록한 리소스는 색상 하나를 리소스에 등록해 사용할 때 유용하다.

  • 반면, color 디렉터리의 색상 리소스는 특정 뷰의 상태를 표현하고 그 상태에 적용되는 색상을 등록할 때 유용하다.
    ex) 버튼의 상태에 따른 색상을 하나의 xml에 등록해 color 디렉터리에 넣어 사용하면 편리


스타일

  • style 태그로 등록.

  • 뷰에 설정되는 여러 속성을 스타일에 등록해 한꺼번에 적용하거나, 여러 뷰에 중복되는 속성을 스타일로 정의해 재사용할 때 사용

  • parent 속성으로 다른 스타일을 상속받아 재정의도 가능

<resources>
    <style name="default_view">
        <item name="android:layout_width">50dp</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:textColor">@color/white</item>
        <item name="android:textStyle">bold</item>
    </style>
    <style name="active_view" parent="default_view">
        <item name="android:layout_marginStart">30dp</item>
        <item name="android:enabled">true</item>
    </style>
</resources>
  • style="@style/active_view 로 스타일 리소스 사용 가능.

플랫폼 리소스

개발자가 리소스를 따로 준비하지 않아도 안드로이드 플랫폼이 제공하는 리소스

  • Project 탐색 창에서 Package로 설정하면 Libraries 항목에서 플랫폼 리소스를 확인할 수 있다.

  • 플랫폼 리소스는 R이 아니라 android.R.~ 경로로 이용할 수 있다.

  • XML에선 @android:drawable/save 처럼 @android:를 붙여 플랫폼 리소스를 사용한다.


profile
Backend Dev / Data Engineer

0개의 댓글