본문 바로가기
개발/안드로이드

[안드로이드]attr.xml

by darksilber 2011. 12. 23.
반응형
출처 - http://blog.naver.com/bilang?Redirect=Log&logNo=110092414467

안녕하세요.


안드로이드의 Home 소스를 보다 보니까,

R.styleable.??? 라는 것을 사용하더라구요.


R.style.????는 책에서 보았는데,


R.styleable.??? 은 styles.xml 파일에도 없고, 도대체 이것을 뭐하는 것이란 말인가?


하는 의문해서 시작해서 한참을 헤맷답니다.




오늘 드디어 이 넘이 뭐하는 것인지 알았답니다 ^^



결론은 xml 파일에서 사용할 수 있는 사용자 속성을 만드는 것이더군요.



1. attr.xml 에 사용자 속성 만들어 두기

res/attr.xml 이라는 파일을 만들고, 그 내용에 원하는 속성의 형태를 기술해 줍니다.


attr.xml 의 예 입니다.
<resources>
<!-- CellLayout specific attributes. These attributes are used to customize
a CellLayout view in XML files. -->
<declare-styleable name="CellLayout">
<!-- The width of a single cell -->
<attr name="cellWidth" format="dimension" />
<!-- The height of a single cell -->
<attr name="cellHeight" format="dimension" />
<!-- Padding to apply at the start of the long axis -->
<attr name="longAxisStartPadding" format="dimension" />
<!-- Padding to apply at the end of the long axis -->
<attr name="longAxisEndPadding" format="dimension" />
<!-- Padding to apply at the start of the short axis -->
<attr name="shortAxisStartPadding" format="dimension" />
<!-- Padding to apply at the end of the short axis -->
<attr name="shortAxisEndPadding" format="dimension" />
<!-- Number of cells on the short axis of the CellLayout -->
<attr name="shortAxisCells" format="integer" />
<!-- Number of cells on the long axis of the CellLayout -->
<attr name="longAxisCells" format="integer"/>
</declare-styleable>
</resources>


위 예제는 CellLayout 이라는 사용자 콤포넌트에서 추가할 속성을 정의한 것이랍니다.


2. layout 파일에서 속성값 선언하기

layout.xml 에 사용자 콤포넌트 태그를 추가하면서 그 안에 위 속성을 사용할 수 있답니다.

레이아웃 xml 파일의 일부 랍니다.

<soludens.andr.launcher.CellLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:launcher="http://schemas.android.com/apk/res/soludens.andr.launcher"

android:layout_width="fill_parent"
android:layout_height="fill_parent"

launcher:cellWidth="106dip"
launcher:cellHeight="73dip"
launcher:longAxisStartPadding="0dip"
launcher:longAxisEndPadding="55dip"
launcher:shortAxisStartPadding="0dip"
launcher:shortAxisEndPadding="0dip"
launcher:shortAxisCells="4"
launcher:longAxisCells="4" />


위 코드를 보시면, launcher: 뒤쪽에 있는 속성 이름이 attr.xml 파일에 정의한 것하고
같은 것들임을 보실 수 있습니다.



3. 안드로이드 소스 코드에서 해상 속성값 읽어 오기

위처럼 사용자 속성을 만들어서 기술한 후에
실제 코드에서 xml에 들어있는 값을 가져오는 방법은 아래와 같습니다.


CellLayout.java의 생성자 코드 일부 랍니다.

public CellLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CellLayout, defStyle, 0);

mCellWidth = a.getDimensionPixelSize(R.styleable.CellLayout_cellWidth, 10);
mCellHeight = a.getDimensionPixelSize(R.styleable.CellLayout_cellHeight, 10);

... 중간생략 ...

a.recycle();

... 중간생략 ...
}


이렇게 하면,

mCellWidth 는 106dip 가
mCellHeight 는 73dip 가

들어오게 됩니다.




수고하세요^^


출처: http://www.androidside.com/bbs/board.php?bo_table=B46&wr_id=775

반응형

댓글