Android TextView:点击更改文本颜色

21
我有一个文本框,它的行为类似于本地链接,单击它会从数据库中获取图像并显示它。它不会一直向服务器发送请求。 以下是文本视图的XML代码:
<TextView android:layout_marginLeft="2dp" android:linksClickable="true"
            android:layout_marginRight="2dp" android:layout_width="wrap_content"
            android:text="@string/Beatles" android:clickable="true" android:id="@+id/Beatles"
            android:textColor="@color/Black"
            android:textSize="12dp" android:layout_height="wrap_content" android:textColorHighlight="@color/yellow" android:textColorLink="@color/yellow"  android:autoLink="all"></TextView>

我想要改变文本视图的颜色为黄色,而不是默认的黑色。

就像按钮的行为一样,但是我想改变文本的颜色而不是背景颜色。


https://dev59.com/b2435IYBdhLWcg3whAax - CoolMind
2个回答

25

我喜欢Cristian的建议,但扩展TextView似乎过于复杂。另外,他的解决方案无法处理MotionEvent.ACTION_CANCEL事件,这可能会使您的文本在单击完成后仍保持选定状态。

为了实现此效果,我在单独的文件中实现了自己的onTouchListener:

public class CustomTouchListener implements View.OnTouchListener {     
    public boolean onTouch(View view, MotionEvent motionEvent) {
    switch(motionEvent.getAction()){            
            case MotionEvent.ACTION_DOWN:
            ((TextView)view).setTextColor(0xFFFFFFFF); //white
                break;          
            case MotionEvent.ACTION_CANCEL:             
            case MotionEvent.ACTION_UP:
            ((TextView)view).setTextColor(0xFF000000); //black
                break;
    } 
        return false;   
    } 
}
然后您可以将其分配给任何TextView: newTextView.setOnTouchListener(new CustomTouchListener());

2
谢谢,你的代码对我有用。我在你的答案中加入了“返回真”,现在它可以正常工作了。 - Sanket Kachhela

3

您可以创建一个继承自 Android TextView 类的自定义 TextView 类,并覆盖 onTouchEvent(MotionEvent event) 方法。

然后,您可以根据传入的 MotionEvent 修改实例的文本颜色。

例如:

@Override
public boolean onTouchEvent(MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
       // Change color
    } else if (event.getAction() == MotionEvent.ACTION_UP) {
       // Change it back
    }
    return super.onTouchEvent(event);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接