본문 바로가기

안드로이드/고급

[PAAD] 3장 리소스 다루기

1. 리소스 외부화

ⓐ 문자열(string.xml)
 <?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">할 일 목록</string>
    <string name="add_new">추가</string>
    <string name="remove">삭제</string>
    <string name="cancel">취소</string>
</resources>

- <b><i><u> HTML 태그를 이용하여 굵은 글꼴, 기울임 글꼴 밑줄을 적용할 수 있다
<string name="app_name"><b>할 일 목록</b></string>
- String.format은 위의 텍스트 스타일링을 지원하지 않는다. 포맷 문자열에 스타일링을 적용하려면, 리소스를 생성할때 아래와
   같이 HTML 태그를 이스케이프 해야한다
<string name="app_name">&lt;b>할 일 목록&lt;/b>. %1$s</string>

  String rString = getString(R.string.stop_message);
  String fString = String.format(rString, "Collaborate and listen.");
  CharSequence styledString = Html.fromHtml(fString);

ⓑ 색상
<color> 태그
<color name="opaque_blue">#00F</color>
<color name="transparent_green">#7700FF00</color>

ⓒ치수
dp(160-dpi 화면에 상대적인 밀도 독립 픽셀)
sp(글꼴)
<dimen name="standard_border">5dp</dimen>
<dimen name="large_font">16sp</dimen>

ⓓ스타일/테마
<resources>
    <style name="BaseText">
<item name="andorid:textSize">14sp</item>
<item name="android:textColor">#111</item>
    </stryle>
    <style name="SmallText" parent="BaseText">
          <tem name="android:textSize">8sp</item>
     </stryle>
     <style name="ToDoTheme" parent="@android:style/Theme.Black">
        <item name="android:textSize">12sp</item>
    </style>
</resources>


[추가 내용은 책 3장 참고]



2. 리소스 사용하기

ⓐ R.에 있는 변수값들은 리소스 테이블 안에서 자신에 대응하는 리소스의 위치에 대한 참조일뿐 인스턴스가 아니다
setContentView(R.layout.main);
Toast.makeText(this, R.string.app_err,Toast.L.....).show()

ⓑ 리소스 인스턴스 접근하기
 - 리소스 테이블은 Resources클래스의 인스턴스로 표현됨
 - 리소스 테이블에 대해 조회를 수행기 때문에 static이 될수없고 리소스 인스턴스에 접근하려면 아래와같다
Resources mr = getResources();
CharSequence st = mr.getText(R.string.stop_message);
Drawable icon = mr.getDrawable(R.drawable.app_icon);
int b = mr.getColor(R.color.blue);
float borderWidth = mr.getDimension(R.dimen.standard_border);
Animation tranOut = AnimationUtils.loadAnimation(this, R.anim.spin)
String[] sr = mr.getStringArray(R.array.string_array);
int[] ia = mr.getIntArray(R.array.integer_array);
프레임별 애니메이션이 적용된 리소스
AnimationDrawable rocket = (AnimationDrawable)mr.getDrawable(R.drawable.frame_by_frame);

3. 리소스에서 다른 리소스 참조하기

<?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"
  android:padding="@dimen/standard_border">
  <EditText
    android:id="@+id/myEditText"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/stop_message"
    android:textColor="@color/opaque_blue"
  />
</LinearLayout>


4. 시스템 리소스 사용하기

CharSequence httpErr = getString(android.R.string.httpErrorBadUrl);

<EditText
        android:id="@+id/myEditText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@android:string/httpErrorBadUrl"
    />


5. 현재 테마에서 스타일 참조하기
- 현재 테마의 텍스트 색상을 이용

<EditText
        android:id="@+id/myEditText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textColor="?android:textColor"
    />