안드로이드 개발 팁 #70 - 2가지 조건에 따라 배경색을 다르게 설정하기 위한 selector 리소스 정의 방법
2가지 조건에 따라 배경색을 다르게 설정하기 위한 selector 리소스 정의 방법
No. 70
2024. 06. 18 (화) | Written by @dorian-mobileapp
시작하며...
다음과 같은 배경색을 갖는 뷰를 구현하려면 어떻게 해야 할까요?
- 버튼: 터치할 때와 안할 때의 배경색이 다르다.
- 토글 버튼: 체크 여부에 따라 배경색이 다르다.
위와 같은 특성은 selector 리소스를 만들고 그것을 뷰의 background 속성으로 지정하면 됩니다.
터치할 때와 안할 때의 배경색이 다른 selector 리소스
아래 코드는 뷰를 누를 때 배경색을 검정으로, 그렇지 않을 때 배경색을 회색으로 설정하기 위한 selector입니다.
<selector xmlns:android ="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/black" />
<item android:state_pressed="false" android:drawable="@drawable/gray" />
</selector>
- android:state_pressed
- 뷰가 눌러진 상태인지를 나타냄
- true: 사용자가 뷰를 누르고 있음
- android:drawable
- 뷰의 외형을 설정할 수 있음
- 설정 항목: 크기(너비, 높이), 색상(solid), 선(border), 모서리 둥글기(corner) 등
추가로 색상이 검정인 drawable 파일은 다음과 같이 정의할 수 있습니다.
<shape xmlns:android ="http://schemas.android.com/apk/res/android">
<solid android:color="##000000" />
</shape>
체크 여부에 따라 배경색이 다른 selector 리소스
아래 코드는 뷰가 체크되었을 때 배경색을 파랑으로, 그렇지 않을 때 배경색을 하얀색으로 설정하기 위한 selector입니다.
<selector xmlns:android ="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@drawable/blue" />
<item android:state_checked="false" android:drawable="@drawable/white" />
</selector>
selector 리소스를 뷰의 background 속성에 적용
위와 같이 정의한 selector 리소스를 뷰의 android:background 속성에 정의하면 됩니다.
<Button
...
android:background="@drawable/selector_파일_이름" />
지난 안드로이드 개발 팁
- #69 - ToggleButton 뷰에 적용된 그림자 효과 제거
- #68 - 타겟팅 버전 33 변경 후, 발생하는 SecurityException 해결 방법 (from registerReceiver)
- #67 - 인텐트에 데이터를 읽거나 기록할 때 발생하는 BadParcelableException 예외
- #66 - Deprecated 코드 개선: Intent 클래스의 getSerializableExtra 메소드
- #65 - 화면 전체를 차지한 뷰를 위로 밀어 올리는 애니메이션 리소스
- #64 - android.database.Cursor 클래스의 확장 함수
- #63 - 모서리가 둥근 사각형
- #62 - 키보드 숨김 실행 방법 그리고 이를 실행하는 확장 메소드
- #61 - 타겟 SDK 버전을 34로 설정 후 수정해야 하는 코드
- #60 - (ChatGPT 활용) 아이디에 마스크 적용하기
- #59 - ChatGPT로 간단한 코딩은 질문으로 물어보자
- #58 - TextView 뷰에 스크롤 적용 방법
- #57 - JSON 포맷의 문자열을 GSON 라이브러리 제공 JsonObject 타입으로 변환
- #56 - 앱이 백그라운드 모드에서도 라이브 데이터 관찰 방법
- #55 - 프래그먼트에서 코루틴 플로우 수집 주기 정하기
- #54 - 떠 있는 키보드 숨기는 방법
- #53 - 1줄의 텍스트를 입력받는 EditText 뷰에서 엔터 키 누름 처리 방법
- #52 - 마크다운 텍스트를 웹뷰로 보여주기 위해 추가로 설정해야 할 것
- #51 - 마크다운 텍스트를 HTML 텍스트로 변환한 후 스타일 적용 방법
- #1 ~ #50
Layout provided by Steemit Enhancer hommage by ayogom
Posted through the ECblog app (https://blog.etain.club)
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.
안녕하세요.
SteemitKorea팀에서 제공하는 'steemit-enhancer'를 사용해 주셔서 감사합니다. 개선 사항이 있으면 언제나 저에게 연락을 주시면 되고, 관심이 있으신 분들은 https://cafe.naver.com/steemitkorea/425 에서 받아보실 수 있습니다. 사용시 @응원해 가 포함이 되며, 악용시에는 모든 서비스에서 제외될 수 있음을 알려드립니다.
안녕하세요.
이 글은 SteemitKorea팀(@ayogom)님께서 저자이신 @dorian-mobileapp님을 응원하는 글입니다.
소정의 보팅을 해드렸습니다 ^^ 항상 좋은글 부탁드립니다
SteemitKorea팀에서는 보다 즐거운 steemit 생활을 위해 노력하고 있습니다.
이 글은 다음날 다시 한번 포스팅을 통해 소개 될 예정입니다. 감사합니다!
Upvoted! Thank you for supporting witness @jswit.