안드로이드에서,
Button의 backgroundTint, 글자색 바꾸기 (style, selector 사용)
* 필자가 글쓰기 편하도록 음씀체로 작성되었습니다.
파일 만들때는 color리소스에 color추가 -> selector -> style -> Button에 참조거는 순으로 되겠지만,
Button -> style -> selector순으로 블로깅했음, 중간에 빨간불 나는거 보고 파일 생성하면 됨.
필자는 파일명을 좀 길게 지었고,
이 게시물은 친절한 설명은 아니고, 이미 해봤던 사람들 코드 참고하라고 올렸음.
이게 어려운거는 아닌데 귀찮고, 구글링하게 되면 끝도없이 스택오버플로랑, 웹페이지 보게 되니까
그냥 아무 블로그나 잡아서 만드는게 나은 듯 함.
chatgpt한테 만들어 달라니까 이거는 잘 못 만들어냈음....ㅜ
스택오버플로에서도 selector구현하는 소스를 자주 보게 되는데, 페이지 대충 보다가 닫아버리면 찾지를 못하겠다
근데 이거는 전혀 어려운게 아니고 그냥 하면 됨.
style파일 따로 안 만들거면, button에 바로 옵션적고, selector파일 만들어서 넣으면 됨.
==========================================
// 1. 적용하려는 Button
style="@style/만든스타일이름"
<Button
android:id="@+id/deleteModeButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:text="@string/delete"
app:layout_constraintTop_toTopOf="@+id/addButton"
app:layout_constraintEnd_toStartOf="@+id/saveButton"
app:icon="@drawable/baseline_toggle_on_24_white"
style="@style/DeleteModeButtonStyle"
/>
==========================================
// 2. style파일 생성
res/value/styles.xml
대충 위치와 파일이름, 파일이름은 입맛대로?
- parent에는 스타일을 오버라이딩 할 원하는 Button, 난 Widget.AppCompat.Button, 머티리얼 타입 버튼이 될 수도 있겠다.
- style태그에서 name이, Button에서 참조할때 쓸 이름
- android:textColor : 버튼의 글자색 속성
- backgroundTint : 버튼의 색상
- 나는 색상을 바꿀거라서, color 디렉토리를 하나 생성해서 거기에 selector파일을 생성했음, 모양까지 바꾸려면 drawble 디렉토리에 만들면 될 듯함.? drawble에 넣어뒀으면 @drawble/파일명으로 참조
@drawable, @color 참조가 자동완성이 잘안되던데, 손수 타이핑해서 입력, 그래도 안되면 클린빌드
이 두 속성 말고, android:textColor / backgroundTint 다른 속성으로도 되는게 있을 수 있는데,
나는 이거로 했을때 내가 원하는 동작으로 되었음.
- backgroundTint가 api21이상만 먹힌다고 보이던데?, 그 이하를 지원해야하면 다른 방법 찾아야할지도 모르겠다.
<resources>
<style name="DeleteModeButtonStyle" parent="Widget.AppCompat.Button">
<item name="android:textColor">@color/selector_delete_mode_button_textcolor</item>
<item name="backgroundTint">@color/selector_delete_mode_button_tint</item>
</style>
</resources>
==========================================
// 3. selector 파일 생성
res/color/your_selector_name.xml
나는 color 디렉토리를 하나 생성해서 거기 넣었고,
모양까지 바꾸려면, drawble에 넣으면 될 듯.
// 글자색 바꾸는 selector
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="@color/white" />
<item android:color="@color/button_enable_false_textcolor" />
</selector>
android:state_pressed : 누르고 있을때 컬러가 바뀌게 하는것.
저런 상태가 있는 item을 위에 작성해야함. item들이 위에서 부터 맞아떨어지면 작동되는걸로 구글링할때 봤음.
if - else if 구문이라 봐야함.
다크모드에 따라 다른 컬러를 지원하려면 selector들의 night 리소스를 파면 될 듯 함?
// backgrounTint 바꾸는 selector
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="?attr/colorPrimary" />
<item android:color="@color/button_enable_false_tint" />
</selector>
selector에서는 색깔 속성을 android:color을 쓰고,
style에서 적어둔거에 따라 다른 컬러가 되는 것 같다.
여기서, ?attr/colorPrimary
?attr은 이 앱에 적용된 Theme의 Style내에 작성된 attribute, 즉, item들을 참조해오는 키워드임
테마는 다크모드 적용해서 주요 색상 쓰게 될테니, ?attr로 재활용하면 될 듯함.
attr이 커스텀뷰를 만들때도 사용되던데, 그 부분은 모르겠당..
==========================================
// 4. Colors.xml 파일에서 원하는 컬러 만들기
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="purple_200">#FFBB86FC</color>
<color name="purple_500">#FF6200EE</color>
<color name="purple_700">#FF3700B3</color>
<color name="teal_200">#FF03DAC5</color>
<color name="teal_700">#FF018786</color>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
<color name="button_enable_false_textcolor">#8B8B8B</color>
<color name="button_enable_false_tint">#E0E0E0</color>
</resources>
=================================
(대충 오늘 일기)
근데, 나의 문제는
클릭했을때 바뀌는걸 하고싶었는데,
누르고 있을때만 바뀌는것이었고...
selector에 여러가지 옵션들중에서 내가 원하는거는 안보인다.....
예전에도 selector 만들어봤는데...?
나는 왜 이거를 만드려고 찾고 있었을까????
티스토리가 코드블록에서도 bold체를 줄 수 있으면 더 좋았을텐데,,,,
코드블록을 안쓰고 그냥 text로 붙여야하나 궁시렁..
=================================
혹시 보다가 막히는거 있으면 댓글 달아주세요.
'Android > Kotlin in android' 카테고리의 다른 글
테마 보면서 머티리얼 디자인에 대해 궁금했던것들을 (0) | 2024.02.23 |
---|---|
안드로이드 버튼 android:src와 app:srcCompat 두 속성의 차이점 (with. chatgpt) (0) | 2024.02.23 |
android android:gravity와 android:layout_gravity의 차이 (0) | 2023.08.25 |
RecyclerView를 연습해보았다 (공부한 자료 & 회고) (0) | 2023.04.28 |
코루틴coroutine &플로우flow 학습 했던거 회고 (0) | 2023.04.25 |