본문 바로가기

Programming/android

안드로이드 버튼 Selector



버튼의 상태에 따라서 버튼의 스타일을 다르게 지정할 수 있다. 
이것을 하는 방법은, 

1. 자바파일에서 한다.
2. xml에서 한다.
두가지 방법이 있다.

개인적으로는, 두번째 방법이 좀 더 깔끔하고 정리도 잘되는것 같다.

그렇다면, xml에서 처리하는 방법에 대해서 알아보자.


1. res/drawable 폴더에 xml을 생성한다.

res/drawable/btn_style.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">   
<item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/button_focus" />
<item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/button_pressed" />
<item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/button_pressed" />
<item android:drawable="@drawable/button_normal" />
</selector> 

color로도 가능하다.
예는 다음과 같습니다.

color_back.xml

<?xml version="1.0" encoding="utf-8"?>

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

    <item android:state_pressed="true" android:drawable="@color/more_more_light_gray" />

    <item android:drawable="@color/white" />

</selector>



가능한 상태는 다음과 같다. 적절하게 사용하자.

android:state_focused
android:state_pressed
android:state_enabled

2. 선택하고자 하는 버튼에 배경으로 설정한다.

<Button android:background="@drawable/btn_style" ....... />
(자바소스에서 지정해도 된다. btn.setBackgroundResource(R.drawable.btn_style));

주의!!
아이템의 순서는 버튼의 기능에 영향을 미친다.

가.
<item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/button_pressed" />
<item android:drawable="@drawable/button_normal" />

나.
<item android:drawable="@drawable/button_normal" />
<item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/button_pressed" />

가와 나는 다르게 작동한다는 뜻.

안드로이드 공식 링크는 다음과 같다.
아무래도, 개발자 사이트에서 보는게 좋겠다.
http://developer.android.com/guide/topics/resources/color-list-resource.html 
http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList