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

发布于 2024-10-24 07:45:36 字数 1319 浏览 1 评论 0原文

我有一个可点击的 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 文件时/em>,无论我是否按下它,文本颜色都会变成灰色。这很奇怪,因为我在所有颜色字段中都写了“#000000”。
但是,如果我删除 setTextColor 代码,使 textView 变为浅灰色,当我按下它时,它会变成黑色。但这不是我想要的颜色。

那么,有人可以帮我解决这个问题吗?

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

I have a clickable TextView that I want to give some colors to. But I don't know how. Here are the relevant code snippets from my two files that I'm working with:

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 */                   

    }
});

And this is my textcolor.xml file:

<?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>

When I use the textcolor-file by typing title.setTextColor(R.color.textcolor);, the textcolor just becomes grey, regardless if I press it or so. Which is strange since I have written "#000000" in all color fields.
But if I remove the setTextColor code, gets the textView a light grey color, and when I press it, it becomes black. But that aren't the colors that I want.

So, can anyone help me with this problem?

Just to clarify: I want to be able to specify the colors for the text when it's normal, pressed and focused.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

盛装女皇 2024-10-31 07:45:36

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

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

关于如何设置 ColorStateList 的 UPD文本颜色:

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

注意createFromXml(Resources, XmlPullParser parser) 方法在 API 级别 23 中已弃用。
使用 createFromXml(Resources, XmlPullParser parser, Theme)

使用 XML 非常简单:

android:textColor="@color/selector_txt"

If you want to set stateful color from code, you need to pass in ColorStateList as an argument to setTextColor passing an int to the method results in setting the color to all the states. It also looks like your xml is not totally correct. Example from ColorStateList docs looks like(should be located like this: res/color/selector_txt.xml):

 <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 on how to set a ColorStateList to text color:

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

Note: The method createFromXml(Resources, XmlPullParser parser) was deprecated in API level 23.
Use createFromXml(Resources, XmlPullParser parser, Theme)

With XML its as easy as:

android:textColor="@color/selector_txt"
眼眸 2024-10-31 07:45:36

第1步:在xml中设置文本颜色,如下所示

android:textColor="@color/text_color"

第2步:创建 res/color/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>

Step 1: Set the text color in xml like this

android:textColor="@color/text_color"

Step2: Create res/color/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>
一影成城 2024-10-31 07:45:36

试试这个..它对我有用:

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

Try this one.. It worked for me:

File name: 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>

Try setting the color in xml layout as:

android:textColor="@color/bg_tab_text_color"
泛泛之交 2024-10-31 07:45:36

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

Look in R.java class (it's generated automatically). You have something like that:

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

So in your code in line:

title.setTextColor(R.color.textcolor);

you're not setting values from textcolor.xml but int from R.java (which contains textcolor.xml address). The valid way to set color is:

title.setTextColor(getResources().getColorStateList(R.color.textcolor));
り繁华旳梦境 2024-10-31 07:45:36

这是一种非常简单的编程方法:

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

Here is a very simple way programmatically:

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);
    }
停滞 2024-10-31 07:45:36

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

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

尝试将 xml 布局中的颜色设置为:

android:textColor="@color/bg_tab_text_color"

It's very easy.Try this one.. It worked for me:

File name: 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" />

Try setting the color in xml layout as:

android:textColor="@color/bg_tab_text_color"
雨后咖啡店 2024-10-31 07:45:36

在 res/drawable/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" />

In res/drawable/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" />
黑寡妇 2024-10-31 07:45:36

在 res/color/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);

In res/color/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>

In layout:

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

In code:

textView.setSelected(false); // To deselect.
textView.setSelected(true);
誰認得朕 2024-10-31 07:45:36

对我来说,这种方法有效:

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

For me just this way worked:

<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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文