Android

[Android] 안드로이드 커스텀 버튼 xml Select Event - 버튼의 눌림 효과

jokey12 2020. 12. 28. 23:57

app - res - drawable 밑에 xml 리소스 파일 생성

 

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    //버튼 pressed 했을때
    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <corners android:radius="50sp"/>
            <solid android:color="#ff0000"/>
        </shape>
    </item>
    
    
    //일반 버튼 상태
    <item>
        <shape android:shape="rectangle">
            <corners android:radius="50sp"/>
            <solid android:color="#00ff00"/>
        </shape>
    </item>
    
    
    
</selector>

 

item 태그 하위 속성

state_pressed 객체를 누를 때 (ex : 버튼을 터치하거나 클릭 할 때)
이 항목을 사용해야하는 경우 "true"

이 항목을 누르지 않은 기본 상태로 사용해야하는 경우 "false"
state_checked 개체를 확인할 때
이 항목을 사용해야하는 경우 "true"
객체를 체크하지 않은 상태에서 사용해야하는 경우 "false"
state_enabled 개체가 활성화되어있을 때
이 항목을 사용해야하는 경우 "true"(터치 / 클릭 이벤트 수신 가능)
개체를 사용할 수 없을 때 사용해야하는 경우 "false"
state_focused 버튼이 강조 표시 될 때와 같이 객체에 포커스가있을 때
이 항목을 사용해야하는 경우"true "
이 항목을 초점이없는 기본 상태로 사용해야하는 경우 "false"
state_selected 개체를 선택할 때 (ex : 탭을 열 때와 같이)
이 항목을 사용해야하는 경우 "true"
 
개체를 선택하지 않은 상태에서이 항목을 사용해야하는 경우 "false"

 

코너 둥글기

<corners android:radius="50sp"/>

 

배경 색상

<solid android:color="#ff0000"/>

 

 

*유의 사항

 

이벤트 효과를 갖는 태그( <item android:state_pressed="true"> )를 먼저 작성

만약 효과가 없는 태그보다 밑에 위치한다면 아무런 변화가 없음


 

적용 방법

    <Button
        android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/button1"/>

background 속성에 @drawable/button1 적용해주면 완료

 

 

결과

버튼 누르기 전

 

 

버튼 누르고 있는 상태


추가) 이미지 버튼

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

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

    <item
        android:drawable="@drawable/img">
    </item>

</selector>

itme 태그 내에 drawable 경로 추가