更改焦点上可点击的TextView颜色并单击?

问题描述:

我有一个可点击的TextView,我想给一些颜色。但我不知道如何。下面是我的两个文件我的工作相关的代码片段:更改焦点上可点击的TextView颜色并单击?

TextView title = new TextView(this); 
title.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
title.setTextColor(R.color.textcolor); 
title.setText(titleLine); 
title.setTypeface(null, Typeface.BOLD); 
title.setClickable(true); 
title.setId(idLine); 
title.setFocusable(true); 

title.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 

       /* Irrelevant code */     

    } 
}); 

这是我textcolor.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="#000000"/> <!-- pressed --> 
    <item android:state_focused="true" 
      android:color="#000000"/> <!-- focused --> 
    <item android:color="#000000"/> <!-- default --> 
</selector> 

当我键入使用的文字颜色文件title.setTextColor(R.color.textcolor);,textcolor只是变成灰色,不管我是否按下左右。这是奇怪的,因为我已经在所有颜色字段中编写了“#000000”。
但是,如果我删除setTextColor代码,获取textView浅灰色的颜色,当我按它时,它变成黑色。但那不是我想要的颜色。

那么,任何人都可以帮助我解决这个问题吗?

只是为了澄清:我希望能够为正常,按下和聚焦的文本指定颜色。

+0

对于人们通过搜索引用此页面上,请参阅我的回答如果你正在寻找使用的颜色,而不是'ColorStateList'。我的解决方案无需使用Java编写任何代码:) – 2013-02-11 19:54:06

如果你想设置的代码状态的颜色,你需要在ColorStateList以作为参数传递给setTextColor传递一个int的方法导致颜色设置为所有状态。它也看起来像你的XML不完全正确。从ColorStateList文档实例样子(应位于这样的:res/color/selector_txt.xml):如何设置一个ColorStateList文本颜色

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_focused="true" android:color="@color/testcolor1"/> 
    <item android:state_pressed="true" android:state_enabled="false" android:color="@color/testcolor2" /> 
    <item android:state_enabled="false" android:color="@color/testcolor3" /> 
    <item android:color="@color/testcolor5"/> 
</selector> 

UPD:

ColorStateList cl = null; 
try { 
    XmlResourceParser xpp = getResources().getXml(R.color.selector_txt); 
    cl = ColorStateList.createFromXml(getResources(), xpp); 
} catch (Exception e) {} 

随着XML的那么容易,因为:

android:textColor="@color/selector_txt" 
+1

我改变了我的XML文件到你的建议,我做了一些搜索我应该如何在setTextColor方法中发送一个ColorStateList。我发现这个有用的帖子:http://www.anddev.org/post27828.html#p27828所以现在它都正常工作。 :)但是,我需要在xml文档中稍微调整一下状态。 – 2011-03-21 07:35:32

+0

@Daniel Jonsson我已将帖子中的代码添加到答案中,所以对其他人更容易。 – 2011-03-21 08:02:56

+0

@Konstantin Burov:+1谢谢你,你的回答帮助我... – 2012-07-25 05:20:13

查看R.java类(它是自动生成的)。你有这样的事情:

public static final class color { 
     public static final int gray_transparent=0x7f050001; 
} 

因此,在你的代码行:

title.setTextColor(R.color.textcolor); 

你没有设置从textcolor.xml值,但是从R.java(INT包含textcolor.xml地址)。设置颜色的有效方法是:

title.setTextColor(getResources().getColorStateList(R.color.textcolor)); 
+0

非常感谢您的帮助!现在它实际上从文件读取颜色。 :) 但是,我仍然有一个问题。它只是读取默认颜色。如果我点击文字,颜色不会改变,这很奇怪。你知道是什么原因造成的吗? – 2011-03-20 23:14:40

+3

它应该是'getResources()。getColorStateList',而不是'getResources()。getColor'。 – Patrick 2011-08-09 16:49:54

+0

@帕特里克是啊,getResources()。getColorStateList真的有用。 – anticafe 2011-12-16 08:04:09

第1步:设置在XML文本颜色像这样

机器人:文字颜色= “@颜色/ text_color”

第二步:创建RES /颜色/ text_color.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android" > 

<item android:state_pressed="true" 
     android:color="#ffffffff"/> <!-- pressed --> 
<item android:state_focused="true" 
     android:color="#ff0000ff"/> <!-- focused --> 
<item android:color="#ff000000"/> <!--default --> 

</selector> 
+0

根本不起作用 – AlwaysConfused 2017-04-22 00:49:35

+0

@AlwaysConfused,为什么?什么是设备,操作系统版本? – CoolMind 2017-10-09 16:34:43

试试这个..它的工作对我来说:

文件名:res/color/bg_tab_text_color。XML

<?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="@color/tab_unselected_text_color"/> 
    <item android:state_pressed="true" android:color="@color/tab_selected_text_color"/> 
    <item android:state_pressed="false" android:state_selected="true" android:color="@color/tab_selected_text_color"/> 
    <item android:color="@color/tab_unselected_text_color"></item> 
</selector> 

尝试如设置颜色XML布局:

android:textColor="@color/bg_tab_text_color" 
+0

节省时间。运作良好。 – Ganesh 2014-04-25 05:58:16

这是非常easy.Try这一个。它为我工作:

文件名:RES /颜色/ bg_tab_text_color.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

<item android:state_pressed="true" android:drawable="@color/blue" /> 

尝试作为设置颜色在XML布局:

android:textColor="@color/bg_tab_text_color" 

在res /抽拉/ tab_textColor.xml:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="true" android:color="#FFFFFF" /> 
    <item android:state_pressed="true" android:color="#FFFFFF" /> 
    <item android:color="#CCCCCC" /> 
</selector> 



<TextView 
    android:id="@+id/title" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/icon" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="5dp" 
    android:text="@string/tab_indicator_home" 
    android:textColor="@drawable/tab_textcolor" 
    android:textSize="10sp" 
    android:visibility="visible" 
    tools:ignore="SmallSp" /> 

在res /颜色/ text_selector.xml:

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

布局:

<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Word" 
    android:textColor="@color/text_selector" 
    android:textSize="12sp"/> 

在代码:

textView.setSelected(false); // To deselect. 
textView.setSelected(true);