2010년 10월 28일 목요일

자원요소-기본자원

기본자원에는 문자열, 문자열배열, 색상, 디멘젼, 단순표시물, 비트맵그래픽, 애니메이션 시퀀스, 메뉴파일, XML 파일, raw 파일, 레이아웃 파일, 스타일, 테마, Asset 자원, Searchable 등이 있다.


문자열

필수디렉토리 파일명(권장)
/res/values/ strings.xml

Strings를 리소스로 저장하고 참조할 수 있다. 스트링을 포맷팅하려면 세 가지 HTML tag를 사용할 수 있다: <b>, <i>, and <u>.
스타일이 적용되지 않은 텍스트만을 얻으려면 CharSequence 객체에 toString() 메쏘드를 호출하면 된다. 문자열 자원을 수용하는 메쏘드를 만들려면 앞서 정의한 태그들을 처리할 수 있어야 한다.

자바 코드로 이 자원에 접근하려면 Resources.getString() 이나 Resources.getText() 메쏘드를 사용한다.

Syntax
<string name=string_name>string_value</string>

Resource reference name:
Java: R.string.some_name
XML: @[package:]string/some_name (where some_name is the name of a specific string)

ex) 문자열 자원 정의 기본 예

<string name="good_example">"This'll work"</string>
<string name="good_example_2">This\'ll also work</string>
<string name="bad_example">This won't work!</string>
<string name="bad_example_2">XML encodings won&apos;t work either!</string>

ex) 포맷된 문자열 정의

<resources>
   <string name="simple_welcome_message">Welcome!</string>
   <string name="styled_welcome_message">We are <b><i>so</i></b> glad to see you.</string>
</resources>

ex) strings.xml에 정의된 문자열 자원을 참조

<TextView android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:textAlign="center"
          android:text="@string/simple_welcome_message"/>


문자열 배열

필수디렉토리 파일명(권장)
/res/values/ arrays.xml


ex) 문자열 배열 정의

<resources>
<array name="honorifics">
<item>Dr.</item>
<item>Mr.</item>
<item>Mrs.</item>
<item>Ms.</item>
</array>
</resources>

* 위 자원을 자바 코드에서 사용하려면
getResources.getStringArray(R.array.honorifics);


색상

필수디렉토리 파일명(권장)
/res/values/ colors.xml

color drawables 와 color string 값을 저장하는데 사용하며, 이 자원에 접근하려면 각각 Resources.getDrawable() 와 Resources.getColor() 을 사용한다.

Syntax
<color name=color_name>#color_value</color>

Resource reference name:
Java: R.color.some_name
XML: @[package:]color/some_name (some_name 은 특정 색상의 이름)

ex) 색상 정의

<resources>
   <color name="opaque_red">#f00</color>
   <color name="translucent_red">#80ff0000</color>
</resources>

ex) 다른데서 정의된 색상을 참조

<TextView android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:textAlign="center"
          android:textColor="@color/translucent_red"
          android:text="Some Text"/>

// 이것을 호출하는 Java 코드인 경우는 다음과 같다.
int color = getResources.getColor(R.color.opaque_red);


디멘젼

필수디렉토리 파일명(권장)
/res/values/ dimen.xml

Syntax
<dimen name=dimen_name>dimen_value</dimen>

Resources.getDimension()

Resource reference name:
Java: R.dimen.some_name
XML: @[package:]dimen/some_name (여기서 some_name은 특정 <dimen> 엘리먼트의 이름)

px : Pixels 실제화면의 픽셀을 말한다. 예:20 px
in : Inches 물리적길이 예:5in
mm : Millimeters 물리적길이 예:3mm
Pt : Points 글자크기단위 예:14pt
dp : Density-independent Pixels  160dpi 화면을 기준으로 한 픽셀단위 예:8dp
sp : Scale-independent Pixels 가변글꼴 표시에 최적임 예:14sp

ex) 기본 디멘젼 정의

<resources>
    <dimen name="one_pixel">1px</dimen>
    <dimen name="double_density">2dp</dimen>
    <dimen name="sixteen_sp">16sp</dimen>
</resources>

ex) 디멘젼 자원 참조

// Example Java code:
float dimen = Resources.getDimen(R.dimen.one_pixel);

// Example XML code:
<TextView android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:textSize="@dimen/sixteen_sp"/>


단순표시물

필수디렉토리 파일명(권장)
/res/values/ drawables.xml

색상있는 사각형 등 PaintDrawable 객체를 자원으로 정의해서 사용할 수 있다.

Syntax
<drawable name=color_name>color_value</drawable>

Resource reference name:
Java: R.drawable.some_name
XML: @[package:]drawable/some_name (여기서 some_name은 특정 자원의 이름)

ex) 단순표시물 정의

<resources>
    <drawable name="solid_red">#f00</drawable>
    <drawable name="solid_blue">#0000ff</drawable>
    <drawable name="solid_green">#f0f0</drawable>
</resources>

solid_red.xml 파일에 위 코드를 저장

ex) 단순표시물 참조

// Assign a PaintDrawable as the background to
// a TextView on the current screen.
Drawable redDrawable = Resources.getDrawable(R.drawable.solid_red);
TextView tv = (TextView)findViewByID(R.id.text);
tv.setBackground(redDrawable);

Example XML code

<TextView android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:textAlign="center"
          android:background="@drawable/solid_red"/>


비트맵 그래픽

필수디렉토리: /res/drawable/

지원형식:  9.png, png (preferred), jpg (acceptable), gif (discouraged)
이 유형의 자원에 액세스하려면 Resources.getDrawable() 또는 mContext.getResources().getDrawable(R.drawable.imageId) 메쏘드를 사용한다.

Resource reference name:
Java: R.drawable.some_file
XML: @[package:]drawable/some_file

참고) 이미지를 비트맵으로 변환하기 위해 비트 스트림으로 저장하려 한다면, 그 이미지를 res/raw/ 폴더에 저장하면 최적화되지 않은 채로 컴파일된다.


애니메이션 시퀀스

필수디렉토리
/res/anim/

rame by frame animation 또는 tweened animation 객체로 컴파일된 XML 파일을 저장한다.

Resource reference name:
Java: R.anim.some_file
XML: @[package:]anim/some_file

ex) 트윈드 애니메이션 정의

<set android:shareInterpolator=boolean>  // Only required if multiple tags are used.
   <alpha android:fromAlpha=float
          android:toAlpha=float >   |
   <scale android:fromXScale=float
          android:toXScale=float
          android:fromYScale=float
          android:toYScale=float
          android:pivotX=string
          android:pivotY=string >    |
   <translate android:fromX=string
              android:toX=string
              android:fromY=string
              android:toY=string >   |
   <rotate android:fromDegrees=float
           android:toDegrees=float
           android:pivotX=string
           android:pivotY=string > |
   <interpolator tag>
   <set>
</set>


메뉴 파일

필수디렉토리: /res/menu/

Resource reference name:
Java: R.menu.some_file

ex) 옵션메뉴 만들기

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/new_game"
          android:title="New Game" />
    <item android:id="@+id/quit"
          android:title="Quit" />
</menu>

ex) 그룹이 있는 옵션메뉴 만들기

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@+id/example_item
          android:title="Example Item"
          android:icon="@drawable/example_item_icon" />

    <group android:id="@+id/example_group">
        <item android:id="@+id/example_item2
              android:title="Example Item 2"
              android:icon="@drawable/example_item2_icon" />
    </group>

    <item android:id="@+id/example_submenu
          android:title="Example Sub Menu" >
        <menu>
            <item android:id="@+id/example_submenu_item
                  android:title="Example Sub Menu Item" />
        </menu>
    </item>
</menu>


XML 파일

필수디렉토리
/res/xml/

Resources.getXML()


Raw 파일

필수디렉토리
/res/raw/

Resources.openRawResource(R.raw.somefilename);


레이아웃 파일

필수디렉토리: /res/layout/

Resource reference name:
Java: R.layout.some_file
XML: @[package:]layout/some_file

레이아웃 자원 참조 자바 코드:
  setContentView(R.layout.main_screen);

Syntax
<ViewGroupClass xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/string_name" (attributes)>
   <위젯 또는 기타 네스트된 ViewGroupClass>+
   <requestFocus/>(레이아웃 파일당 0또는 1개 지정가능하고, 어떤 엘리먼트든 할당 가능)
</ViewGroupClass>

엘리먼트 설명
<ViewGroupClass>
이 파일의 루트 엘리먼트는 하나만 설정할 수 있다. 루트 엘리먼트는 다른 엘리먼트를 담고 있는 ViewGroup 클래스일 수도 있고, 한 개의 객체일 경우에는 위젯(또는 커스텀 위젯)이 될 수도 있다. 디폴트로, 엘리먼트로서 안드로이드 위젯 또는 ViewGroup 클래스명(대소문자 구분함)을 사용할 수 있다. 유효하지 않은 네스팅이 될 수도 있으니(예를 들면, <ListLayout> 안에 <TextView> 엘리먼트를 네스팅할 수 없다) 주의가 필요하다.
<requestFocus>
View 객체에 속하는 엘리먼트는 어떤 것이든 이 빈 엘리먼트를 포함시킬 수 있다. 그 의미는 화면 생성시 초기에 이 엘리먼트의 부모 태그에 포커스 주도록 하는 것이다. 파일당 한 개만 지정할 수 있다.


스타일

필수디렉토리 파일명(권장)
/res/values/ styles.xml

스타일은 한 엘리먼트(예를 들어 TextView에 적용된 10 pt red Arial font)에 적용되는 한 가지 이상의 속성이다. 스타일은 레이아웃 XML 파일의 엘리먼트에 속성으로 적용될 수 있다.


테마

필수디렉토리 파일명(권장)
/res/values/ themes.xml

테마는 전체 화면에 적용되는 한 가지 이상의 속성이다.
예를 들어 테마를 정의하여 윈도우 프레임의 색상과 패널의 전,후면, 그리고 메뉴의 문자 크기와 색상에 적용하여 애플리케이션의 액티비티에 반영되도록 할 수 있다.

스타일은 개별자원에만 지정할 수 있는 반면, 테마는 뷰 전체에 대해 지정하여 사용할 수 있다.

AndroidManifest.xml 파일의 활동요소(<activity>)의 android:theme 특성에 지정하여 사용한다.

스타일/테마 작성 절차
1.res/values 디렉토리에 styles.xml 파일을 생성한다. 루트에 <resource> 노드를 추가한다.
2.각 스타일 또는 테마에 <style> 요소를 고유한 이름을 주어 생성하고 부모 속성이 있다면 지정한다. 이름은 코드에서 참조할 때 사용하며, 부모 속성은 상속받을 스타일을 지정하는 것이다.
3.<style> 요소 안에, 포맷 값을 <item> 요소로 선언한다.
4.그러면 이제 매니페스트 파일이나 애플리케이션 코드 등 다른 XML 자원에서 이 리소스를 참조할 수 있다.

ex) 테마 선언

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="CustomTheme">      
    <item name="android:windowNoTitle">true</item>
    <item name="windowFrame">@drawable/screen_frame</item>
    <item name="windowBackground">@drawable/screen_background_white</item>
    <item name="panelForegroundColor">#FF000000</item>
    <item name="panelBackgroundColor">#FFFFFFFF</item>
    <item name="panelTextColor">?panelForegroundColor</item>
    <item name="panelTextSize">14</item>
    <item name="menuItemTextColor">?panelTextColor</item>
    <item name="menuItemTextSize">?panelTextSize</item>
  </style>
</resources>

ex) 테마를 매니페스트 파일이 등록

<application ... android:theme="@style/CustomTheme"> <!-- 애플리케이션의 모든 액티비티 에 대해 이 테마가 적용됨 -->

ex) 액티비티에 다이얼로그 테마 적용
<activity ... android:theme="@android:style/Theme.Dialog">

ex) 프로그램 코드에 테마 적용

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); ...
setTheme(android.R.style.Theme_Light);
setContentView(R.layout.linear_layout_3);
}
// setContentView(View)를 호출하기 전 또는 inflate(int,ViewGroup) 전에 setTheme을 설정해야 한다.


Searchable

디렉토리,파일명 : res/xml/searchable.xml

전체 시스템의 기능으로 검색이 나타나도록 하기 위해, 안드로이드 프레임워크는 검색결과가 나타나도록 하는  API를 제공하고 있다. 이 API로 검색이 invoke되고 검색 다이얼로그가 나타나는 방법, 가용한 검색결과의 유형, 그리고 결과의 제시 방법을 설정할 수 있다.
안드로이드 검색 프레임워크를 사용하려면, 애플리케이션은 XML 리소스 형태로 검색 구성을 설정해야 한다.

Resource reference name:
Java: R.xml.filename.
XML: @[package:]xml/filename (e.g., @xml/searchable).

댓글 없음:

댓글 쓰기