안녕하세요 돼지왕 왕돼지입니다.
Custom Class 를 만들어 사용 하던 중, Custom Attribute 를 정의해서 사용할 일이 생겼습니다.
그냥 쓰면 되는 줄 알았더니 아니더군요.
자, 이제부터 차근차근 custom attribute 를 정의해서 사용하는 방법을 알아볼까요?
준비물
1. /values/attr.xml 파일
2. custom attribute 를 사용할 xml 파일에 namespace 정의
3. custom class 에서 custom attribute 받아오는 코드.
1. /values/attr.xml 파일
/values/attr.xml 에는 사용할 custom attribute 를 정의해줍니다.
<format>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name=[STYLE_NAME]>
<attr name=[ATTRIBUTE_NAME] format=[TYPE]/>
</declare-styleable>
</resources>
<ex>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="CustomView">
<attr name="isScaleable" format="boolean" />
</declare-styleable>
</resources>
2. custom attribute 를 사용할 xml 파일에 namespace 정의
우리가 항상 써왔지만, 제대로 인식하지 못했던 namespace 요 녀석을 정의해줘야 합니다.
항상 무엇을 써왔냐구요?
xmlns:android="http://schemas.android.com/apk/res/android"
요 녀석이죠. 우리가 attribute를 줄 때 늘상 써오던 android: 가 바로 namespace 입니다.
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
이제, 우리가 새로운 attribute 를 추가해줬으니 새로운 namespace 를 정의해주어야 1.번에서 정의한 attr.xml 을 활용할 수 있습니다.
<format>
<[TAG]
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:[NAME_SPACE]="http://schemas.android.com/apk/res/[PACKAGE_NAME]"
/>
<ex>
<CustomView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res/com.test.customattrtest"
android:layout_width="match_parent"
android:layout_height="match_parent"
custom:isScaleable="true"
/>
3. custom class 에서 custom attribute 받아오는 코드.
Attribute 값들은 Constructor 에 전달되어오는 AttributeSet attrs 를 통해서 얻을 수 있습니다.
<format>
context.obtainStyledAttributes( AttributeSet attrs, int styleableResourceID ).[getFunction]( int styleableAttributeID, <T> defaultValue );
<ex>
context.obtainStyledAttributes( attrs, R.styleable.CustomView ).getBoolean( R.styleable.CustomView_isScaleable, false );
자 이상으로 여러분들도 custom attribute 를 정의하고 사용할 수 있습니다.
쉽지요?
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[Android/안드로이드] MediaPlayer 관련 개발 Tip들. (2) | 2012.02.18 |
---|---|
[Android/안드로이드] MediaPlayer APIs. (0) | 2012.02.18 |
[Android/안드로이드] String ( 문자열 ) 로 Resource 의 id 구하는 방법. (0) | 2012.02.17 |
[Android/안드로이드] Media ( Audio, Video ) Recording APIs. (0) | 2012.02.16 |
[Android/안드로이드] Media DB 의 Table과 Column 정보들. (2) | 2012.02.16 |
댓글