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

Android Custom State 만들기.

by 돼지왕 왕돼지 2014. 6. 2.
반응형


 Android Custom State 만들기.

 


Android Custom State 만들기.


selector 를 이용하면 코드에서 번잡스럽게 해결해야 하는 state 에 따른 resource change 를 아주 쉽게 처리할 수 있다.

하지만, 몇몇 view 에서는 우리가 원하는 모든 state 를 지원하지 않는다.


예를 들면 LinearLayout 은 state_selected 에 대한 값을 가지고 있지 않다.


만약 state_selected 를 LinearLayout 에도 지원하고 싶다면, 다음과 같이 작성하면 된다.


public class SelectableLinearLayout extends LinearLayout{

private static final int[] ADDITIONAL_STATES = { android.R.attr.state_selected };


private boolean mIsSelected;


...


@Override

public int[] onCreateDrawableState( int extraSpace ){

int[] drawableState = super.onCreateDrawableState( extraSpace + ADDITIONAL_STATES.length );

if ( mIsSelected )

mergeDrawableStates( drawableState, ADDITIONAL_STATES );

return drawableState;

}


@Override

public void setSelected( boolean selected ){

super.setSelected( selected );


if ( mIsSelected != selected ){

mIsSelected = selected;

refreshDrawableState();

invalidate();

}

}


...

}


만약에 이렇게 다른 view 에서는 기본으로 지원되지만, 일부 view 에서만 지원되지 않는 state 를 떠나서, 새로운 state 를 만들고 싶다면..


일반적인 custom attribute 생성 절차를 따르면 된다.


< res/values/attrs.xml >

<resources>

...

<declare-styleable name="MyState">

<attr name="state_my" format="boolean" />

</decalre-styleable>

...

</resources>



Custom Attribute 의 적용은 아래와 같이 하면 된다.


<res/drawable/my_selector.xml>

<selector xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:my="http://schemas.android.com/apk/res/com.test.mystate">


...

<item my:state_my="true" android:drawable="@drawable/my_state" />

...


</selector>






반응형

댓글