dafi
11/26/2013 - 12:49 PM

Android TextView changing color when clicked. It uses the setSelect(); to change color. Show how to change text color and background

Android TextView changing color when clicked.
It uses the setSelect(); to change color.
Show how to change text color and background

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- not selected has transparent color -->
    <item android:state_pressed="false" android:state_selected="false">
        <color android:color="#00000000"/>
    </item>
    <item android:state_pressed="true">
        <color android:color="#ff0000"/>
    </item>
    <item android:state_pressed="false" android:state_selected="true">
        <color android:color="#ff0000"/>
    </item>
</selector>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="false" android:state_selected="false" android:color="#000000"/>
    <item android:state_pressed="true" android:color="#0000ff"/>
    <item android:state_pressed="false" android:state_selected="true" android:color="#0000ff"/>
</selector>
    <com.ternaryop.phototumblrshare.widget.ClickableTextView
        android:id="@+id/title_textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/thumbnail"
        android:layout_toRightOf="@+id/thumbnail"
        android:textColor="@drawable/text_link_selector"
        android:background="@drawable/text_link_selector_bg"
        android:textSize="15sp"
        android:textStyle="bold"
        android:typeface="sans" />
package com.ternaryop.phototumblrshare.widget;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;

public class ClickableTextView extends TextView implements OnTouchListener {
	public ClickableTextView(Context context, AttributeSet attrs,
			int defStyle) {
		super(context, attrs, defStyle);
		setup();
	}

	public ClickableTextView(Context context, AttributeSet attrs) {
		super(context, attrs);
		setup();
	}

	public ClickableTextView(Context context, int checkableId) {
		super(context);
		setup();
	}
	
	public ClickableTextView(Context context) {
		super(context);
		setup();
	}

	private void setup() {
		setOnTouchListener(this);
	}

	@Override
    public boolean onTouch(View v, MotionEvent event) {
        if (hasOnClickListeners()) {
            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                setSelected(true);
                break;
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
                setSelected(false);
                break;
            }
        }

        // allow target view to handle click
        return false;
    }
}