如何以编程方式更改TextView颜色

时间:2016-03-17 11:31:24

标签: c# android visual-studio xamarin

我对这个看似简单的任务感到难过。

我想简单地将textview的颜色和linearlayout的背景颜色更改为我的colors.xml资源文件中设置的颜色。

我尝试过:

myTextView.SetTextColor(this.Resources.GetColor(Resource.Color.myColor));

但这已被弃用。

然后我尝试了:

myTextView.SetTextColor(ContextCompat.GetColor(context, Resource.Color.myColor));

ContextCompat.GetColor()会返回int而不是Android.Graphics.Color,因此无法编译。

然后我尝试将颜色设置为style的一部分:

  <style name="myColorStyle">
    <item name="android:textColor">
      @color/myColor
    </item>
...
  </style>

并使用

首先设置它
myTextView.SetTextAppearance(this, Resource.Style.myColorStyle);

但是这也是弃用的

我试过了:

myTextView.SetTextAppearance(Resource.Style.myColorStyle);

但这会引发异常:

  

Java.Lang.NoSuchMethodError:没有非静态方法“Landroid / widget / TextView; .setTextAppearance(I)V”

这个简单的任务是如何实现的?

我使用Xamarin 和Visual Studio在 C#中编码。

4 个答案:

答案 0 :(得分:10)

2017年,这是通过资源ID获取颜色的正确方法,即使它看起来非常复杂:

new Android.Graphics.Color (ContextCompat.GetColor (this, Resource.Color.bb_orange));

每: https://forums.xamarin.com/discussion/54193/res-getcolor-is-deprecated

答案 1 :(得分:3)

不需要如此复杂,只需使用

myTextView.setTextColor(Color.parseColor("#000"));

 myTextView.setTextColor(Color.parseColor("red"));

myTextView.setTextColor(getResources().getColor(R.color.YOURCOLOR));

答案 2 :(得分:2)

<强>更新

我首先没有注意到它,但我看到你已经尝试过这个解决方案。你用的是什么版本?在我看来它没有被弃用。

 textView.SetTextColor(Resources.GetColor(Resource.Color.red));

在Resources / values / colors.xml

<?xml version="1.0" encoding="utf-8" ?>
<resources>
  <color name="red">#ff0000</color>
  <color name="blue">#0000ff</color>
</resources>

Xamarin Resource.Color

答案 3 :(得分:1)

如果你想跳过xml,那很简单。

  myTextView.SetTextColor(Android.Graphics.Color.Red);

也适用于设置文本视图的背景颜色。

myTextView.SetBackgroundColor(Android.Graphics.Color.White);