Android 更改可点击文本视图';焦点上的颜色并单击?

Android 更改可点击文本视图';焦点上的颜色并单击?,android,colors,onclick,textview,hyperlink,Android,Colors,Onclick,Textview,Hyperlink,我有一个可点击的文本视图,我想给它一些颜色。但我不知道怎么做。以下是我正在处理的两个文件中的相关代码片段: TextView title = new TextView(this); title.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); title.setTextColor(R.color.textcolor); title.setText(titleLine);

我有一个可点击的文本视图,我想给它一些颜色。但我不知道怎么做。以下是我正在处理的两个文件中的相关代码片段:

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代码,文本视图就会变成浅灰色,当我按下它时,它就会变成黑色。但那不是我想要的颜色

有人能帮我解决这个问题吗

只是想澄清一下:我希望能够指定文本在正常、按下和聚焦时的颜色。

在R.java类中查找(它是自动生成的)。你有这样的想法:

 public static final class color {
        public static final int gray_transparent=0x7f050001;
}
因此,在您的代码行中:

title.setTextColor(R.color.textcolor);
您不是在textcolor.xml中设置值,而是在R.java(包含textcolor.xml地址)中设置int。设置颜色的有效方法是:

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

如果要从代码中设置有状态的颜色,则需要作为参数传入,以便将int传递给方法,从而将颜色设置为所有状态。看起来您的xml也不完全正确。
ColorStateList
文档中的示例如下所示(应如下所示:
res/color/selector_txt.xml
):

注意:方法
createFromXml(参考资料,XmlPullParser)
在API级别23中被弃用。 使用
createFromXml(参考资料,XmlPullParser解析器,主题)

使用XML,其操作非常简单:

android:textColor="@color/selector_txt"

步骤1:如下设置xml中的文本颜色

android:textColor=“@color/text\u color”

步骤2:创建res/color/text\u 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>
<?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>

试试这个。。这对我很有用:

文件名:res/color/bg\u tab\u text\u 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>
<?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>

这很简单。试试这个。。这对我很有用:

文件名:res/color/bg_tab_text_color.xml

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

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

在res/drawable/tab\u 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/color/text\u 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>

以下是一种非常简单的编程方式:

private void setColorStateList(TextView view) {
        int[][] states = new int[][] {
                new int[] { android.R.attr.state_pressed}, // pressed
                new int[] { android.R.attr.state_focused}, // focused
                new int[] { android.R.attr.state_enabled}  // enabled
        };

        int[] colors = new int[] {
                getResources().getColor(R.color.blue),
                getResources().getColor(R.color.green),
                getResources().getColor(R.color.green) 
        };

        ColorStateList list = new ColorStateList(states, colors);
        view.setTextColor(list);
        view.setClickable(true);
        view.setFocusableInTouchMode(true);
    }

对我来说,这种方式奏效了:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="@color/colorSelected" />
    <item android:state_pressed="false" android:color="@color/colorDefault" />
</selector>


非常感谢您的帮助!现在它实际上从文件中读取颜色。:)然而,我仍然有一个问题。它只读取默认颜色。如果我点击文本,颜色不会改变,这很奇怪。你知道这是什么原因吗?应该是
getResources().getColorStateList
,而不是
getResources().getColor
@Patrick是的,getResources().getColorStateList确实有效。请注意,从API 23开始,此方法已被弃用:
ContextCompat.getColorStateList(this,R.color.textcolor)
可用于消除弃用。我将XML文件更改为您建议的格式,并对如何在setTextColor方法中发送ColorStateList进行了一些搜索。我发现了这篇有用的帖子:现在一切都正常了但是,我需要稍微调整一下xml文档中的状态。@Daniel Jonsson我已经将帖子中的代码添加到了答案中,这样其他人就更容易了。要通过编程方式进行设置,请使用以下命令:myTextView.setTextColor(getResources().getColorStateList(R.color.selector_txt));对于通过搜索引用此页面的用户,如果您希望使用颜色而不是
ColorStateList
,请务必参考我的答案。我的解决方案不需要用Java编写任何代码:)@AlwaysConflused,为什么?什么是设备,操作系统版本?太好了,这是对那些需要编程解决方案的人最好的答案!工作起来很有魅力!完美节省我的时间伙计:)
<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);
private void setColorStateList(TextView view) {
        int[][] states = new int[][] {
                new int[] { android.R.attr.state_pressed}, // pressed
                new int[] { android.R.attr.state_focused}, // focused
                new int[] { android.R.attr.state_enabled}  // enabled
        };

        int[] colors = new int[] {
                getResources().getColor(R.color.blue),
                getResources().getColor(R.color.green),
                getResources().getColor(R.color.green) 
        };

        ColorStateList list = new ColorStateList(states, colors);
        view.setTextColor(list);
        view.setClickable(true);
        view.setFocusableInTouchMode(true);
    }
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="@color/colorSelected" />
    <item android:state_pressed="false" android:color="@color/colorDefault" />
</selector>