2011-03-20 195 views
21

我有一個可點擊的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

回答

52

如果你想設置的代碼狀態的顏色,你需要在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

10

查看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

39

第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

15

試試這個..它的工作對我來說:

文件名: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

3

這是非常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" 
0

在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" /> 
0

在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);