일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 한달브런치북만들기
- 안드로이드
- 함수형 프로그래밍
- 소프시스 밤부 좌식 엑슬 테이블
- 목적 중심 리더십
- 한달어스
- 소프시스
- 자취필수템
- 테트리스
- 지지않는다는말
- T자형인재
- 면접
- 한단어의힘
- 목적중심리더십
- 프래그먼트
- 1일1커밋
- 재택근무
- 슬기로운 온라인 게임
- 좌식테이블
- 베드테이블
- 한달독서
- 끝말잇기
- 리얼하다
- 어떻게 나답게 살 것인가
- 베드트레이
- 커스텀린트
- 브런치작가되기
- 아비투스
- 캐치마인드
- 북한살둘레길
- Today
- Total
정상에서 IT를 외치다
[Android, Custom Switch] 안드로이드 스위치 버튼 꾸미기 본문
안녕하세요. 블랙진입니다.
오늘은 알림을 ON, OFF 할 때 많이 사용하는 Switch 를 Customizing 하는 법에 대해 포스팅 해보겠습니다.
아래는 기본 Switch 뷰와 코드입니다.
<Switch
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
1. Switch Track 설정
스위치의 배경이라고 생각하시면 됩니다. 코드는 아래와 같습니다.
switch_track_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/switch_track_off"
android:state_checked="false"/>
<item
android:drawable="@drawable/switch_track_on"
android:state_checked="true"/>
</selector>
스위치 selector 입니다. switch_track_on, switch_track_off xml 을 체크 되었을 떄와 안되었을 때에 맞춰 보여줄 수 있습니다.
switch_track_on.xml
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<corners
android:radius="15dp" />
<size
android:width="51dp"
android:height="30dp" />
<solid
android:color="#4cd964" />
<!--stroke
android:width="2dp"
android:color="#000000" /-->
</shape>
switch 가 on 되었을 때 배경은 초록색으로 설정하였습니다.
switch_track_off.xml
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<corners
android:radius="15dp" />
<size
android:width="51dp"
android:height="30dp" />
<solid
android:color="#9b9b9b" />
<!--stroke
android:width="2dp"
android:color="#000000" /-->
</shape>
switch 가 off 되었을 때 배경은 회색으로 설정하였습니다.
2. Switch Thumb 설정
스위치 할 때 움직이는 동그란 아이콘 입니다.
switch_thumb.xml
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size
android:width="30dp"
android:height="30dp" />
<solid
android:color="#FFFFFF" />
<stroke
android:width="1dp"
android:color="#FFFFFF" />
</shape>
3. Switch 의 track 와 thumb 를 설정해 사용하시면 됩니다.
<Switch
android:layout_width="wrap_content"
android:layout_height="31dp"
android:track="@drawable/switch_track_selector"
android:thumb="@drawable/switch_thumb"/>
그러면 위와 같이 움직이는 Switch 가 완성됩니다.~!~!
참고로 Switch View 에 setOnCheckedChangeListener 을 설정하여 원하시는 코드를 실행 하시면 됩니다.
switchView.setOnCheckedChangeListener(object : CompoundButton.OnCheckedChangeListener{
override fun onCheckedChanged(buttonView: CompoundButton, isChecked: Boolean) {
if(isChecked) {
//체크된 상태 취소 시 코드
} else {
//체크된 상태로 만들 시 코드
}
}
})
ps) 위 Switch 를 보면 원(thumb)에 padding이 없고 배경이 흰색이여서 뭔가 어색함을 느낄 수 있습니다.
이때 원(thumb)에 padding 을 주는 법은 아래와 같습니다.
이렇게 하면 좀 더 자연스럽고 멋진 switch 가 됩니다.
switch_thumb.xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:left="1dp"
android:right="1dp"
android:top="1dp"
android:bottom="1dp">
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size
android:width="29dp"
android:height="29dp" />
<solid
android:color="#FFFFFF" />
<stroke
android:width="1dp"
android:color="#FFFFFF" />
</shape>
</item>
</layer-list>
<2019.03.27 추가>
API 21 하위 버전에서는 아래와 같이 스위치가 찌그러져 보입니다.
이에 대한 해결법을 Stackoverflow 에서 찾아 링크를 남깁니다.
해결법
track, thumb 를 추가한 Switch 에 아래 4가지 사항을 추가해줍니다.
android:switchMinWidth="0dp"
android:textOff=""
android:textOn=""
android:thumbTextPadding="15dp"
'안드로이드' 카테고리의 다른 글
[Android, Camera] 2. 카메라 프리뷰를 이용한 화면 캡처 및 배경 이미지 적용 (1) | 2018.08.22 |
---|---|
[Android, Camera] 1. 카메라 프리뷰를 이용한 화면 캡처 및 배경 이미지 적용 (2) | 2018.08.22 |
[Android, Customizing Ripple Effect] 내맘대로 리플 효과 변경하기 (0) | 2018.08.13 |
[Android, Ripple Effect, Selector] 클릭시 뷰에 효과 주기 (4) | 2018.08.13 |
[Android, elevation not working] 안드로이드 elevation 사용하기 위한 조건 (0) | 2018.08.08 |