728x90

리소스는 매우 중요한 부분으로써, 일반적으로 참조하고자 하는 이미지, 오디오, 비디오, 문자열, 테마, 레이아웃 등과 같은 외부 요소들로 이루어진다. 즉 프로그램의 외형을 장식하는 역할을 한다.

 

모든 안드로이드 어플리케이션은 리소스 디렉토리(res/) 와 에셋 디렉토리(asstes/)를 가진다.

 

일반적으로 에셋보다는 리소스를 주로 사용한다. 이유는 안드로이드의 R 클래스를 통하여 쉽게 참조가 가능하기 때문이다.

 

리소스 생성

 

리소스는 많은 타입의 리소스를 지원하며, 각각의 포맷, 저장되는곳 들은 그 객체의 타입에 따라 다르다.

 

일반적으로는 아래 세 개의 타입으로 리소스를 만들면 된다.

 

1.XML파일 (비트맵, 원시 파일을 제외한 모든 것)

2.비트맵 파일 (이미지 등)

3.원시(raw) 파일 (사운드 파일 같은)그외 모든것들

 

프로젝트 내의 res 디렉토리 아래 또는 그 하위에 리소스 파일을 저장하며, 리소스가 위치하는 하위 폴더와 파일 포맷에 따라 그것들을 컴파일하는 리소스 컴파일러(aapt)를 가지고 있다.

 

 

리소스는 최종적으로 .apk 파일내에 컴파일이 되며 R 이라는 래퍼 클래스를 통해 리소스들을 참조할 수 있게 해준다. R 클래스는 파일 경로와 그에 따르는 서브클래스를 포함하고 있다.

 

리소스 타입

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

res/drawable : 이미지 파일, 도형을 정의하는 xml 파일 등을 저장

res/layout : 화면의 레이아웃을 저장한다. 뷰 그룹과 뷰 파생 클래스의 배치 상태가 레이아웃에 기록된다.

res/values : 문자열,색상,배열,크기,스타일(strings.xml, colors.xml, arrays.xml, dimens.xml, styles.xml) 등 여러 가지 값들을 정의하는 xml 파일이 이 폴더에 배치된다.

res/xml : 실행 중에 읽어서 사용할 임의의 xml 파일을 저장

res/raw : 임의의 이진 파일이 저장

 

리소스 사용

리소스는 컴파일 시점에서 시스템은 프로그램에 있는 모든 리소스에 대한 식별자를 포함하는 R 클래스를 생성한다.

 

R 클래스는 자동으로 생성되며 ,빌드 시점에 자동으로 갱신되기 떄문에 절대로 편집하지 않아야 한다.

 

아래는 R 클래스의 구조

코드에서 리소스 사용

코드에서 리소스를 사용하려면, 리소스 ID와 리소스 타입을 알아야 한다.

 

R.resourceType.resourceName 형식 : 직접 생성한 리소스를 참조 할때

android.R.resourceType.resourceName : 미리 정의되어 있는 안드로이드 내의 리소스를 참조 할떄

 

리소스 타입은 R 클래스의 서브 클래스가 되며, 리소스 명은 xml에 정의된 속성이거나 다른 파일 타입에 의해 정의된 리소스의 파일 이름이다, 리소스 타입은 알맞게 R 클래스의 서브 클래스로써 추가 되어 진다.

 

직접 생성한 어플리케이션 내의 리소스는 패키지 이름 없이 참조한다. ex) R.XXX.XX

안드로이드에 미리 정의된 표준 리소스는 ex)android.R.XX.XXX , android를 붙여야 한다.

 

리소스 참조하기

속성 또는 리소스로 제공되는 값도 참조할 수가 있다.

예를들어 색상값을 지정한 리소스가 있다면 레이아웃에서 참조하여 색상 지정을 할수가 있다.

 

 

 

리소스 참조를 위해 제일 앞에 @ 문자가 있다, 그다음 텍스트는 @[package:] type/name 형식이며

위 소스에서는 해당 패키지 내부에서 리소스를 참조하는 것이기 때문에 패키지를 지정하지 않았다.

 

 

시스템 리소스 참조를 위해서는 위에서 말한것 처럼 패키지 이름을 써야한다.

 

 

문자열도 리소스로 관리하면 유용하다.

 

 

리소스 상호간에도 리소스를 참조할 수가 있는데 이미 존재하는 이미지에 대해 새로운 드로블 리소스를 만들면 된다.

 

테마 속성 참조하기

 

현재 적용되어 있는 테마의 속성값을 참조하기 위해서는 스타일 리소스와 XML 속성에서만 사용 가능하다.

즉 구체적인 값 대신에 현재 테마를 변경하여 UI를 커스텀하는 방식이다, 예로는 레이아웃에서 기본 시스템 테마의 표준 색상값 중 하나를 참조하여 텍스트 컬러를 지정하는 것과 같은 예가 있다.

 

 

여기서 주의 있게 봐야 할 곳은 @ 대신에 ? 을 사용한다는 것이다.

이떄 테마에서 찾을 속성의 이름을 제공해야 한다. 테마에서 값을 찾는 ? 를 사용하는 것을 제외하면 나머지는 @를 사용하는 구문과 동일하다.

 

시스템 리소스 사용하기

 

이것은 어플리케이션 소스에서도 사용이 가능하다, 이러한 리소스들은 모두 android.R 이라는 클래스에 정의 되어 있다.

 

 

 

728x90

'Android' 카테고리의 다른 글

안드로이드 어댑터 뷰  (0) 2012.08.01
안드로이드 기본 위젯  (0) 2012.07.31
안드로이드 메뉴  (0) 2012.07.31
안드로이드 입력 (이벤트) 4  (0) 2012.07.31
안드로이드 입력 (이벤트) 3  (0) 2012.07.31
Posted by 정망스
,


맨 위로
홈으로 ▲위로 ▼아래로 ♥댓글쓰기 새로고침