20

How can I apply color on the various states(focused, pressed, enabled) of the TextView?

I have already referred this: http://developer.android.com/reference/android/content/res/ColorStateList.html , but do not know how can I apply color state list to the TextView? or is there any other way to do so ?

Update:

I want to change the Background color.

Paresh Mayani
  • 127,700
  • 71
  • 241
  • 295

5 Answers5

37

create xml under res/color dir.

example file name : selector_white_gray.xml

<?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/Gray"/> <!-- pressed -->
    <item android:color="@color/White"/> <!-- default -->
</selector>

you can add more states. you can use color code like "#ffffff" instead of predefined "@color/White". Becarefull, use android:color not android:drawable. this example changes color of text when pressed on it. set the textColor attribute to selector above.

<TextView
       android:layout_width="wrap_content"
       android:layout_weight="1"
       android:layout_height="wrap_content"
       android:textColor="@color/selector_white_gray"
       android:textSize="18sp" 
       android:textStyle="bold" >
</TextView>
Engin OZTURK
  • 2,065
  • 2
  • 21
  • 13
  • I think you meant `@drawable/selector_white_grey` not `@color/selector_white_grey`. – lschlessinger Jul 25 '14 at 00:30
  • 1
    Sorry for the late answer. If i remember correct, code samples are from working code. So it must be color. But you can test it. For now i do not access to my development machine to verify. – Engin OZTURK Jul 29 '14 at 11:45
  • 1
    @lschlessinger "@drawable" is often used when defining a states for the background of a view (you might confuse it with that common situation). In this case it is not used for background, but for textColor, so "@color" should be correct. – Patrick Kuijpers Mar 31 '17 at 07:55
17

Create new a new xml (in the drawable folder). with the color you can specify image for each event state
and you can you can set this xml as you background

if your xml is 'res/drawable/abc.xml' then set background as

android:background="@drawable/abc"

Edited to add color in state xml
our xml, res/drawable/abc.xml

<?xml version="1.0" encoding="utf-8"?>
   <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true"   
    android:drawable="@color/gray" />
</selector>

Then declare gray in your res\values\strings.xml

<color name="gray">#808080</color>
Labeeb Panampullan
  • 34,521
  • 28
  • 94
  • 112
  • thanx for the support, by your example we can set the drawable background, but how can i set the background color? becoz i have to create 3 different set of images for each drawable ,which i think not good idea, so please – Paresh Mayani Dec 03 '10 at 12:03
  • so how can i set the background color on different state of textview ? is it possible? – Paresh Mayani Dec 03 '10 at 12:04
  • I have edited it to set the background color on different state of textview. Check it now, I hope that was your problem – Labeeb Panampullan Dec 03 '10 at 12:22
0
textView = (TextView)findViewById(R.id.myTextView);
mMainView.setOnClickListener(new OnClickListener(){

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        textView.setTextColor(Color.GREEN);//set the color here
    }

});
Tunaki
  • 132,869
  • 46
  • 340
  • 423
abinaya
  • 1
  • 2
  • 1
    Thanks for answering but question is about changing textview background color on changing of state, not about changing text color on clicking it! – Paresh Mayani Nov 30 '15 at 17:59
0

If you want to change color of the text - you create it as an xml in res/color folder ( for example res/color/mycolor.xml and then in your TextView you assig it color as android:textColor="@color/mycolor"

For changing background see other answer.

Alex Volovoy
  • 67,778
  • 13
  • 73
  • 54
0

It's easy. Just intercept desired event and write smth like:

TextView textView=(TextView)findViewById(R.id.myText);
String s=getString(R.string.myText);
SpannableString ss=new SpannableString(s);
ss.setSpan(new ForegroundColorSpan(Color.RED), 0, s.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);
textView.setText(ss);
Barmaley
  • 16,638
  • 18
  • 73
  • 146