본문 바로가기

Programming/Android

[Android] 선택 되었을 때 Text Color 바꾸기

Change Select Text Color(TextView, Button).md

Change Select Text Color(TextView, Button)

drawable를 만들지 않고 select text color 변경하기(Util)

TextView나 Button에서 press나 select 되었을 때, text color를 바꾸려면 아래와 같이 drawable에 selector를 만들어 줘야한다. 그리고 여러 색을 사용할 경우 사용할 때마다 selector를 만들어 줘야한다.

 
xxxxxxxxxx
6
1
<?xml version="1.0" encoding="utf-8"?>
2
<selector xmlns:android="http://schemas.android.com/apk/res/android">
3
    <item android:state_pressed="true" android:drawable="@android:color/holo_red_light" />
4
    <item android:state_selected="true" android:drawable="@android:color/holo_red_light" />
5
    <item android:drawable="@android:color/holo_orange_light" />
6
</selector>

그래서, 코드에서 함수로 만들었습니다.(Util같은 곳에 추가해서 사용하시면 될 것 같습니다.)

(단, Button과 TextView만 해놓았습니다. 추가하시려면 if문 조건대로 추가하시면 됩니다.)

 
xxxxxxxxxx
20
1
public void setColorStateList(View view, int selectedColor, int defaultColor) {
2
        int[][] states = new int[][] {
3
                new int[] { android.R.attr.state_pressed,  android.R.attr.state_selected}, // pressed, selected, focused
4
                new int[] {} // default
5
        };
6
7
        int[] colors = new int[] {
8
                selectedColor,
9
                defaultColor
10
        };
11
12
        ColorStateList textColorList = new ColorStateList(states, colors);
13
        if(view instanceof TextView || view instanceof AppCompatTextView) { /** TextView **/
14
            ((TextView)view).setTextColor(textColorList);
15
            view.setClickable(true);
16
        } else if(view instanceof Button || view instanceof AppCompatButton) { /** Button **/
17
            ((Button)view).setTextColor(textColorList);
18
        }
19
        view.setSelected(true);
20
    }

Example

 
xxxxxxxxxx
4
1
AppCompatTextView textView = (AppCompatTextView) findViewById(R.id.textview); // AppCompatTextView or TextView
2
Button button = (Button) findViewById(R.id.button); // AppCompatButton or Button
3
setColorStateList(textView, ContextCompat.getColor(this, android.R.color.holo_blue_dark), textView.getCurrentTextColor());
4
setColorStateList(button, ContextCompat.getColor(this, android.R.color.holo_red_light), button.getCurrentTextColor());


'Programming > Android' 카테고리의 다른 글

[Android] Handler & Looper  (0) 2017.10.05
[Android] Google Play Store로 이동시키기  (0) 2017.05.31
[Android] Square ImageView (정사각형 ImageView)  (0) 2017.05.03
[Android] Spannable  (0) 2017.01.02
[Android] GPS 설정 체크하기  (0) 2016.12.18