Android - 当状态改变时,如何改变TextView的颜色

20
5个回答

37

在res/color目录下创建xml文件。

示例文件名:selector_white_gray.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="@color/Gray"/> <!-- pressed -->
    <item android:color="@color/White"/> <!-- default -->
</selector>

你可以添加更多的状态。你可以使用颜色代码,如“#ffffff”而不是预定义的“@color/White”。请注意,要使用android:color而不是android:drawable。此示例在按下文本时更改文本颜色。将textColor属性设置为上面的选择器。

<TextView
       android:layout_width="wrap_content"
       android:layout_weight="1"
       android:layout_height="wrap_content"
       android:textColor="@color/selector_white_gray"
       android:textSize="18sp" 
       android:textStyle="bold" >
</TextView>

我认为你的意思是 @drawable/selector_white_grey 而不是 @color/selector_white_grey - lschlessinger
1
抱歉回复晚了。如果我没记错的话,代码示例是来自可运行的代码。所以它必须是彩色的。但你可以测试一下。目前我无法访问我的开发机器进行验证。 - Engin OZTURK
1
@lschlessinger 在定义视图背景状态时,常常使用“@drawable”(你可能会将其与常见情况混淆)。但在这种情况下,它不用于背景,而是用于文本颜色,因此应该使用“@color”。 - Patrick Kuijpers

17
创建一个新的 xml(在drawable文件夹中),你可以为每个事件状态指定颜色,以此来设置图片,并将这个xml设置为背景。
如果您的xml文件路径是'res/drawable/abc.xml',那么请将其设置为背景。
android:background="@drawable/abc"

编辑以在状态xml中添加颜色
我们的xml,res/drawable/abc.xml

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

然后在你的res\values\strings.xml中声明gray。

<color name="gray">#808080</color>

感谢您的支持,通过您的示例,我们可以设置可绘制背景,但是我该如何设置背景颜色呢?因为我必须为每个可绘制创建3组不同的图像,这不是一个好主意,所以请。 - Paresh Mayani
那么我该如何在TextView的不同状态下设置背景颜色?这可能吗? - Paresh Mayani
我已经编辑过了,设置了TextView不同状态下的背景颜色。现在请检查一下,希望这就是您的问题。 - Labeeb Panampullan

0
如果您想更改文本的颜色 - 您可以在res/color文件夹中创建一个xml文件(例如res/color/mycolor.xml),然后在TextView中将其分配为android:textColor="@color/mycolor"
要更改背景,请参见其他答案。

0

这很容易。只需拦截所需事件并编写类似以下的内容:

TextView textView=(TextView)findViewById(R.id.myText);
String s=getString(R.string.myText);
SpannableString ss=new SpannableString(s);
ss.setSpan(new ForegroundColorSpan(Color.RED), 0, s.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);
textView.setText(ss);

0
textView = (TextView)findViewById(R.id.myTextView);
mMainView.setOnClickListener(new OnClickListener(){

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        textView.setTextColor(Color.GREEN);//set the color here
    }

});

1
谢谢回答,但问题是关于在状态改变时更改TextView背景颜色,而不是在单击它时更改文本颜色! - Paresh Mayani

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