올해는 머신러닝이다.
커스텀 레이아웃과 R.sttyleable 본문
R.styleable
xml을 사용하다보면 android:layout_width , android:layout_height 등 android: 로 정의된
각 속성을 정의하게 되어있다.
나만의 레이아웃이나 뷰를 커스텀하게 사용하고자 하는경우
추가로 요구되는 값들이 생길텐데 이러한 값을 xml에서 입력하고자 할때
어케 할까?
예제는 TextButton 에 대한 포스팅에 잘 나와있다.
이번 포스팅은 커스텀 styleable에 대한 내용만 정리해 본다~
1. 나만의 styleable 을 정의하기
해당 내용을 정의할 xml 파일을 만든다. ( my_layout_styleable.xml )
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyLayoutAttribute">
<attr name="value" format="integer"/>
<attr name="color" format="integer"/>
<attr name="run" format="boolean"/>
</declare-styleable>
</resources>
요렇게하면 MyLayoutAttribete 라는 이름으로 3개의 값을 가지고 있는 styleable이
생겨난다.
R.java 를 살펴보면
R.styleable.MyLayoutAttribute
R.styleable.MyLayoutAttribute_value
R.styleable.MyLayoutAttribute_color
R.styleable.MyLayoutAttribute_run
각각의 아이디가 부여된 것을 알수있다.
2. 레이아웃 클래스 생성
원하는 레이아웃을 상속받은 클래스를 하나 만든다.
그리고, 각 속성값을 저장할 변수들을 선언하고, getter/setter 를 설정한다.
getter/setter는 옵션사항이지만 기존 레이아웃들과 비슷한
모양새를 갖추고, 동적으로 레이아웃을 생성하는 경우를 고려해 만들어 준다.
(기존 레이아웃 항목과 겹칠 수 있으니 멤버 어트리뷰트명은 알아서 잘 할것!! -_-;)
public class MyTestLayout extends LinearLayout {
private int value=0;
private int color=0;
private boolean run=false;
public int getValue() {
return innerColor;
}
public void setValue(int value) {
this.value = value;
}
public int getColor() {
return color;
}
.
.
.
.
}
3. 생성자를 구현한다.
레이아웃이나 뷰를 상속받으면 구현해야 하는 생성자가 1개가 아니다.
옹~ 레이아웃의 경우 2개인데..
public MyTestLayout(Context context, AttributeSet attrs);
public MyTestLayout(Context context);
요 두녀석이다.
일반적으로 사용되는 녀석은 당연 윗녀석~
xml에서 여러 속성이 부여되는데 해당 정보가 생성자에 전달된다.
따라서, 위의 생성자에 속성정보를 얻는 코드가 추가되어야 한다.
obtainStyledAttributes() 메쏘드로 위에 정의한 styleable을 얻고,
하위항목은 각 항목별로 형식에 맞는 메쏘드로 실제 데이터를 읽어온다.
public MyTestLayout(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
// 속성값을 읽어 변수에 저장
TypedArray ta = getContext().obtainStyledAttributes(attrs
R.styleable.MyLayoutAttribute);
innerColor = ta.getInteger(R.styleable.MyLayoutAttribute_value, 0);
borderColor = ta.getInteger(R.styleable.MyLayoutAttribute_color, 0);
isAntiAlias = ta.getBoolean(R.styleable.MyLayoutAttribute_run, false);
}
4. 레이아웃 xml에서 속성에 값넣기
레이아웃 태그에는 네임스페이스를 지정할 수 있다. 안드로이드는
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
요렇게 되어있는데 android 라는 네임스페이스를 사용하겠다라는 의미~
이곳에 메인 패키지로 네임스페이스를 추가한다.
그리고,, 그냥 사용하면 된다. -_-;;;
<com.your.package.MyLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myspace="http://schemas.android.com/apk/res/com.your.package"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
myspace:value="1"
myspace:color="ff303030"
myspace:run="false">
.
.
</com.your.package.MyLayout>
'Android > Tip&Tech' 카테고리의 다른 글
Android Drawable 이미지 리스트 목록(추천) (1) | 2011.11.16 |
---|---|
[펌]Android Serial(COM)Port 사용 하기 (0) | 2011.11.15 |
Android tip###### (0) | 2011.11.09 |
안드로이드 블루투스 정보모음 (0) | 2011.11.07 |
[Android] 갤럭시탭을 위해 레이아웃 맞추기 (0) | 2011.10.31 |