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

[Android/안드로이드] Custom Attribute 정의해서 사용하기.

by 돼지왕 왕돼지 2012. 2. 17.
반응형



안녕하세요 돼지왕 왕돼지입니다.
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 를 정의하고 사용할 수 있습니다.
쉽지요? 

 
 
로그인 없이 추천 가능합니다. 손가락 꾸욱~





반응형

댓글