http://developer.android.com/guide/topics/resources/providing-resources.html
- resource folder들
* animator : property animation 정의
* anim : tween animation 정의
* color : color 정의
* drawable : bitmap, nine-patch, state lists, shapes, animation drawable, other drawable
* layout
* menu
* raw : raw form 의 arbitary files. ( Asset 과 비슷 )
* values : string, integer 등의 simple values. ( arrays.xml, colors.xml, dimens.xml, string.xml, styles.xml )
* xml : runtime 에 읽어갈 xml file들.
- configuration 에 따른 resource 적용을 위한 qualifier 는 order 를 지켜서 붙여야 한다. 여러개의 qualifier 를 적용할 때 - 로 구분한다.
- qualifiers
* MCC and MNC : MCC 는 mobile country code. MNC 는 mobile network code. SIM 카드에 dependent 한 code들이다. 예를 들어 U.S. 는 mcc310 이고, Verizon 은 mnc004 이다. 해당 통신사 단말에만 적용 가능한 resource 를 위해서는 mcc310-mnc004 를 qualifier 로 명시해준다.
* language and region : 예를 들면 fr-rCA ( 캐나다의 프랑스어를 쓰는 곳 )
* smallestWidth : sw<N>dp. screen 사이즈의 짧은변의 dimension. 이 녀석은 API Level 13 부터 android:requiresSmallestWidthDp 를 명시해주어 호환가능한 smallestWidth 를 제한할 수 있다.
* available width : w<N>dp. width의 dp 값으로 screen orientation 이 바뀌면서 바뀐다. API 13 부터 android:screenWidthDp 속성이 추가되어 호환가능 단말을 명시할 수 있다.
* available height : h<N>dp. available width 와 같은 맥락. API Level 13부터는 android:screenHeightDp 가 추가되었다.
* screen size : small, normal, large, xlarge 가 있다. 만약 정의된 screen size 가 현재 screen size 보다 크다면, runtime crash 가 난다. 그 반대는 괜찮은 것으로 보인다. android:screenLayout 은 screen 사이즈를 명시해준다.
** small 은 320x426 의 QVGA 나 VGA 정도.
** normal 은 320x470 의 HVGA, WVGA 정도
** large 는 480 x 640 정도의 VGA, WVGA.
** xlarge 는 720x960 이상의 HVGA 이상.
* screen aspect : long, notlong 이 있다. 이 녀석도 screenLayout 에 명시해준다.
** long : WQVGA, WVGA, FWVGA
** notlong : QVGA, HVGA, VGA
* screen orientation : port, land 가 있다.
* dock mode : car, desk 가 있다. UiModeManager 를 통해서 mode 를 변경할 수 있다.
* night mode : night, notnight 가 있다. UiModeManager 를 통해서 mode 를 변경할 수 있다.
* screen pixel density ( dpi ) : ldpi, mdpi, hdpi, xhdpi, nodpi, tvdpi 가 있다. ldpi, mdpi, hdpi, xdpi 는 3:4:6:8 의 scaling ratio 가 있다. tv는 1.33*mdpi 이다.
** ldpi : 120dpi 정도
** mdpi : 160dpi 정도 ( HVGA )
** hdpi : 240dpi 정도
** xdpi : 320dpi 정도
** nodpi : device 에 따른 scale 을 원치 않는 경우에 사용된다.
** tvdpi : mdpi 와 hdpi 중간정도로 213dpi 이다.
* touch screen type : notouch, stylus, finger 가 있다.
* keyboard availability : keysexposed, keyshidden, keyssoft 가 있다.
** keysexposed : keyboard ( soft, hard 상관없이 ) 가 available 할 때.
** keyshidden : h/w keyboard 는 사용가능하나 숨겨진 상태이며 s/w keyboard 가 없을 때.
** keyssoft : s/w 키보드가 enalbe 되어 있을 때.
* primary text input method : nokeys, qwerty, 12key 가 있다.
* navigation key availability : navexposed, navhidden 이 있다. android:navigationHidden 속성으로 conf 설정이 가능하다.
** navexpose : navigation key 가 available 하다.
** navhidden : navigation key 가 available 하지 않다.
* primary non-touch navigation method : nonav, dpad, trackball, wheel 이 있다. android:navigation 속성으로 conf 가능하다.
* platform version : v3, v4, v7 등이 있다. qualifier 들은 api level 마다 추가된 것이 있기 때문에, 호환성을 위해 가능한 많은 set 을 제공하는 것이 좋다.
- qualifier 의 이름은 case-insensitive. qualifier 에 똑같은 속성이 2번 들어갈 순 없다. 예를 들어 drawable-fr-en 과 같은 qualifier 는 무효한다.
- 똑같은 resource 를 다른 conf. 에 동시적용하려면 alias 를 이용하면 된다. 예를 들면 다음과 같이 bitmap element 를 하나 만들어 동시적용하고픈 resource 를 link 하여 xml 을 만들고, 이 녀석들을 각각의 resource folder 에 넣어주면 된다. 이미지를 2번 copy 하는 것보다 훨~씬 효율적이다.
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/icon_ca" />
layout 의 alias 는 다음과 같이 merge 와 include 를 이용하여 만들 수 있다.
<?xml version="1.0" encoding="utf-8"?>
<merge>
<include layout="@layout/main_ltr"/>
</merge>
string 과 같은 간단한 value 들은 간단히 resource id 를 연결해주는 방식으로 갈 수 있다.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello</string>
<string name="hi">@string/hello</string>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="yellow">#f00</color>
<color name="highlight">@color/red</color>
</resources>
- resource 를 관리할 때 대부분 default folder 를 두는 것은 중요하다. 하지만 drawable 의 경우 SDK Level 4 이상에서는 가장 최적의 것을 알아서 찾기 때문에 default drawable 은 필요하지 않다.
- qualifier 는 priority 가 있는데, 이 녀석들을 기준으로 best match resource 를 찾는다. 이 때 drawable 의 density 는 항상 match 대상으로 끝까지 eliminate 되진 않는다. priority 는 다음 table 순 http://developer.android.com/guide/topics/resources/providing-resources.html#table2.
- best match 시 주의할 것은 screen size 에 대한 qualifier 에 대해서는 larger screen의 것은 사용하지 않는다는 것. 더 낮은 screen 에 대한 resource 가 없다면 crash 가 난다.
- Android 1.5 와 1.6 에서는 version 에 대해 exact match 하는 bug 가 있으니 주의 ( 요즘 이 버전으로 개발하는 사람은 없지만.. )
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[Android/안드로이드] Runtime 에 Resource change 에 대하여.. (0) | 2012.06.12 |
---|---|
[Android/안드로이드] Resource 접근에 대하여.. (0) | 2012.06.12 |
[Android/안드로이드] Android 는 View 를 어떻게 그리는가? (0) | 2012.06.12 |
[Android/안드로이드] Layout 에 대하여.. (0) | 2012.06.11 |
[Android/안드로이드] Accessibility Service 에 대하여. (15) | 2012.06.11 |
댓글