0. Selector
- View 에 대한 상태값(State)에 따라 디자인적 요소(Attribute)를 가미하여 꾸며 줄 수있는데(Customizing) 그것을 가능하게
하는 것이 Selector 로 xml 형식으로 작성 가능하다.
Selector 로 작성된 속성들은 한번 만들어 두면 가져다 쓰면 되므로 활용도가 높고 동시에 여러 View 에 적용가능하여
효과적이다.
- State 속성 종류는 다음과 같다.
- state_pressed
- state_accelerated
- state_activated
- state_active
- state_checkable
- state_checked
- state_drag_can_accept
- state_drag_hovered
- state_enabled
- state_first
- state_focused
- state_hovered
- state_last
- state_middle
- state_selected
- state_single
- state_window_focused
1. 기능 구현
- 버튼1 : state_pressed (ture/false)를 활용하여 상태변화에 따라 Color 를 변경해 보자.
- 버튼2 : state_pressed (ture/false)를 활용하여 상태변화에 따라 Image 를 변경해 보자.
2. Android Studio에서 기본 프로젝트(with empty activity) 생성하자!
생성시 'Empty Activity'로 기본 생성
3. ViewBinding 사용을 위한 build.gradle 설정
이번 예제에서는 View Binding 이 필요가 없으므로 기본을 그대로 사용하도록 하자.
4. 준비물 (상태 변화에 따라 적용될 이미지 2개를 준비하자.)
- res > drawable : image (copy&paste)
5. Selector 파일 만들기
- selector 파일 만들기 : res -> drawable 우클릭 -> New -> Drawabke Resource File
- ex) File Name : selector_button
6. selector_button.xml
- 연결될 View 의 상태값을 설정
- item android:state_pressed="true" : 버튼이 눌렸을때
- item android:state_pressed="false" : (기본) 버튼이 눌리지 않았을때
- shape : 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="#FBFB00"/>
<corners android:radius="10dp"/>
</shape>
</item>
<item android:state_pressed="false">
<shape>
<solid android:color="#EDF3B6"/>
<corners android:radius="10dp"/>
</shape>
</item>
</selector>
7. selector_button_img.xml
- item android:state_pressed="true" android:drawable="@drawable/android_icon"
버튼이 눌렸을때 이미지 -> "android_icon"
- item android:state_pressed="false" android:drawable="@drawable/android_icon_gray"
(기본) 버튼이 눌리지 않았을때 이미지 -> "android_icon_gray"
<?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/android_icon">
</item>
<item android:state_pressed="false" android:drawable="@drawable/android_icon_gray">
</item>
</selector>
8. activity_main.xml
- selector xml 적용 전
- selector xml 적용 후
- android:background="@drawable/selector_button"
- android:background="@drawable/selector_button_img"
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/button2"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:text="겨울시인"
android:textColor="#FF4081"
android:textStyle="bold"
android:background="@drawable/selector_button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button3" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="272dp"
android:text=""
android:background="@drawable/selector_button_img"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
9. 실행결과
10. Reference
'Android > Kotlin' 카테고리의 다른 글
[Android, Kotlin] dp, sp 단위에 대해 알아보자. (0) | 2022.04.28 |
---|---|
[Android, Kotlin] 레이아웃 (1) LinearLayout (0) | 2022.04.28 |
[Android, Kotlin] BottomNavigation (0) | 2022.04.25 |
[Android, Kotlin] AndroidX (Jetpack libraries) (0) | 2022.04.25 |
[Android, Kotlin] startActivityForResult (deprecated) (0) | 2022.04.25 |