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

[Android/안드로이드] Resource 제공에 대하여..

by 돼지왕 왕돼지 2012. 6. 12.
반응형




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 가 있으니 주의 ( 요즘 이 버전으로 개발하는 사람은 없지만.. )




반응형

댓글