본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[Android/안드로이드] Resource ( 리소스 ) 에 대한 모든 것.!

by 돼지왕 왕돼지 2012. 2. 27.
반응형


안녕하세요 돼지왕 왕돼지입니다.

오늘은 안드로이드 프로젝트의 "res" 폴더에 해당하는 Resource ( 리소스 ) 에 대해 알아보겠습니다.


 

리소스에 대해 쭉 썰을 풀어봐~


안드로이드의 리소스는 코드에서 분리되어 xml로 정의된 형태이기 때문에 수정과 유지가 매우 쉽습니다.


drawable

 
: 이미지 파일, 도형을 정의하는 XML 파일로, getDrawable() 함수를 통해 resource 접근이 가능합니다.


layout

 
: 화면의 레이아웃을 저의합니다. 다시 말해, 뷰 그룹과 뷰 파생 클래스들의 배치 상태를 정의합니다. 
 

values

 
: 문자열, 색상, 배열, 크기, 단순 drawable, 스타일 등 여러 기본 값들을 담고 있습니다.
 getColor(), getText(), getString(), getDimension() 등을 통해 리소스 접근을 할 수 있습니다.
 

menu


: 메뉴 구성 파일.


xml


: 실행 중에 읽어서 사용할 임의의 xml 파일을 정의.
  getXml() 을 통해서 리소스에 접근합니다.


raw


: 임의의 이진 파일들을 저장.
  openRawResource() 를 통해 리소스에 접근.

[Asset은?]


anim


 : 애니메이션 방식을 정의하는 xml 파일 저장 


 
<resource 파일 파일명 권장 사항>
 
 문자열 : strings.xml
 색상 : colors.xml
 스타일, 테마 : styles.xml
 배열 : arrays.xml
 크기 정보 : dimens.xml
 



resource 정의 xml 들의 기본 form 을 알려줘봐.

 
 strings.xml 

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string name="hello">Hello World, Widget!</string>
</resources>

 

 colors.xml 

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <color name="textcolor">#0000ff</color>
</resources>

 

 dimens.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <dimen name="textsize">12pt</dimen>
</resources>

 

 main.xml  ( layout )

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                      android:orientation="vertical"
                      android:layout_width="fill_parent"
                      android:layout_height="fill_parent"/>
<TextView android:id="@+id/text"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"/>
</LinearLayout>

 

 styles.xml 

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="red15">
    <item name="android:textColor">#ff0000</item>
    <item name="android:textSize">15pt</item>
  </style>
  <style name-"yellow15italic" parent="@style/red15">
    <item name="android:textColor">#ffff00</item>
    <item name="android:textStyle">italic</item>
  </style>
</resources>

 
 
styles2.xml 

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="mytheme">
    <item name="android:windowNoTitle">true</item>
  </style>
</resources>

 




Java 코드에서 리소스 사용은 어떻게 해?


샘플을 보시면 금방 이해하실 수 있을 것입니다.

Resources res = getResources();
 
TextView text = (TextView)findViewById(R.id.text);
 
String str = res.getString(R.string.textstr);
text.setText(str);
 
int textcolor = res.getColor(R.color.textcolor);
text.setTextColor(textcolor);
 
float textsize = res.getDimension(R.dimen.textsize);
text.setTextSize(textsize);






리소스 안에서 다른 리소스를 사용하는 경우도 많다던데?


당연히 많이 있습니다. 가장 흔하게 볼 수 있는 녀석들이 @drawable/icon 이나, @string/appname 따위인데, 그 형식은 다음과 같습니다.

@[패키지:/]타입/id


 
 

 

리소스 보면 디바이스나 국가별로 적용되는것도 뭔가 있던데?


네, 눈썰미가 좋으시네요. 다음과 같은 사항들에 대해 resource 를 잘못 구비해준다면, system이 이것들을 알아서 자동 매핑을 해주곤 합니다. 
 

format : res/폴더-접미
 
언어 : ISO 639-1이 정의하는 두 자리 소문자 국가 코드. us, kr, fr, ja, ru 등
지역 : 소문자 r 다음에 대문자 두 자리로 된 지역 코드. rUS, rKR, rFE 등
화면 방향 : port, land, square
해상도 : 92dpi, 108dpi
터치 스크린 : notouch, stylus, finger
키보드 유무 : keysexposed, keyshidden
입력 장치 : nokeys, qwerty, 12key
네비 방법 : nonnav, dpad, trackball, wheel
화면 크기 : 320x240, 480x320 등. 가로 세로에 상관 없이 항상 큰 값이 앞에 나옴

 
- 여러 개의 접미어를 붙일 때는 대시(-)로 구분. 반드시 도표의 순서에 맞게 작성. (언어. 지역, 화면 방향 등의 순서로 와야 함)
- 모든 풀더는 같은 부모에 속해야 하며 중첩되어서는 안 된다.
- 접미는 대소문자를 구분. 한국어 레이아웃은 layout-kr (o), layout-KR (x)
- 한 환경에 대해서는 하나의 접미만 가능. layout-kr-en (x)
- 코드나 리소스에서 참조할 때는 접미를 붙이지 않는다. 접미는 운영체제가 리소스 선택시만 유효. 
 

로그인 없이 추천 가능합니다. 손가락 꾸욱~





반응형

댓글