본문 바로가기

Android/Knowhow

[selector] 버튼/텍스트뷰의 background와 textColor selector 설정

커스텀한 디자인의 버튼을 만들려고 한다.


press 상태일 때 테두리, 배경, 텍스트 컬러가 모두 변경되어야 한다.




1. [X] TextView의 textColor와 backround 속성에 selector 넣기


1
2
3
4
5
<TextView
    ...
    android:textColor="@drawable/a_selector"
    android:background="@drawable/b_selector"
/>

cs





2. [X] TextView의 background 속성에 넣을 selector에 테두리, 배경, 텍스트 컬러 설정하기


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
31
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_shortAnimTime">
 
    <item android:state_pressed="true" android:color="#ffffff">
        <shape>
            <stroke .../>
            <corners ... />
            <solid  android:color="#ffffff"/>
            <padding ... />
        </shape>
    </item>
 
    <item android:state_focused="true" android:color="#ffffff">
        <shape>
            <stroke .../>
            <corners ... />
            <solid  android:color="#ffffff"/>
            <padding ... />
        </shape>
    </item>
 
    <item android:color="#000000">
        <shape>
            <stroke .../>
            <corners ... />
            <solid  android:color="#000000"/>
            <padding ... />
        </shape>
    </item>
 
</selector>
cs






3. [O] TextView를 RelativeLayout으로 감싼다. RelativeLayout에 clickable 속성을 준다.

RelativeLayout의 background 속성에 @drawable/selector를 적용하고, TextView의 textColor 속성에 @color/selector를 적용한다. 

*** TextView에 clickable 속성을 주면 안된다. 텍스트를 정확히 클릭해야만 textColor가 변하기 때문.



1
2
3
4
5
6
7
8
9
10
        <RelativeLayout
            ...
            android:clickable="true"
            android:background="@drawable/b_selector">
            <TextView
                ...
                android:layout_centerInParent="true"
                android:textColor="@color/a_selector"
                />
        </RelativeLayout>
cs