selector 알아보기

김태영·2024년 6월 25일
0

TIL

목록 보기
36/70
post-thumbnail

오늘 공부한 것

- 알고리즘 피로도 풀이
- selector 공부
- 개인 과제 추가 사항 구현

상태에 따라 다르게 보여주고 싶다면

보통 스마트폰 앱을 누르면 색상이 살짝 진해지면서 눌렸다는 사실을 사용자에게 시각적으로 알려준다. 이와 같이 버튼의 눌린 상태나 선택된 상태, 또는 일반적인 상태에서의 모양을 각각 다르게 주고 싶을 때는 어떻게 해야 할까?

안드로이드 drawable 중, StateListDrawable이란 객체가 있다고 한다. 이 객체는 상태에 따라 여러 개의 이미지를 사용할 수 있게 해준다.

사용

XML에 원하는 이름으로 파일을 만들어 태그 내부에 태그를 작성해주면 된다.

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

<!-- <selector>: 하나 이상의 item을 포함해야 한다. -->
<!-- xmlns:android="...": XML 네임스페이스를 정의한다. -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- <item>: 특정 상태 동안 사용할 drawable 정의 -->
    <item
        android:drawable="@drawable/drawable_resource"
        android:state_pressed="false" />
</selector>

drawable을 사용하는 방법 대신 직접 shape을 정의할 수도 있다.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape>
            <solid android:color="@color/primary"/>
            <corners android:radius="200dp" />
            <stroke 
                android:color="@color/white" 
                android:width="1dp" />
        </shape>
    </item>
    <item>
        <shape>
            <solid android:color="@color/white"/>
            <corners android:radius="200dp" />
            <stroke 
                android:color="@color/primary" 
                android:width="1dp" />
        </shape>
    </item>
</selector>

참조

평소에 drawable을 사용하는 것과 똑같이 사용할 수 있다.

  • 소스코드: R.drawable.filename
  • XML: @[package:]drawable/filename

속성

정말 많은.. 그치만 생각보다는 적은(?) 속성들이 있다. 그렇지만 다 외우고 있기에는 조금 애매하니까 그런 속성들은 그때그때 찾아보기로 하고, 앞으로 뭔가 좀 자주 쓰일 것 같은 속성들만 조금 정리하려고 한다.

  • android:state_pressed: 현재 view가 눌려진 상태
  • android:state_active: 현재 view가 활성화 된 상태
  • android:state_hovered: 커서가 현재 view 위에 올려진 상태
  • android:state_focused: 현재 view가 포커싱 된 상태

이 외의 속성들은 이 곳에서 찾아보도록 하자.

profile
화이팅

0개의 댓글