Can't SetTextColor by Array on Xamarin Android

时间:2016-08-30 04:43:10

标签: c# android xamarin xamarin.android

I'm new android. Can't convert from int to Android.Content.Res.ColorStateList. I don't understand this problem.

int[] colorsInactive = Resources.GetIntArray(Resource.Array.array_dot_inactive);



        for (int i = 0; i < dots.Length; i++)
        {
            dots[i] = new TextView(this);

            dots[i].SetTextColor(colorsInactive[currentPage]);
            dotsLayout.AddView(dots[i]);
        }

Resource.Drawable.arrayAcdots
   <selector name="array_dot_inactive" xmlns:android="http://schemas.android.com/apk/res/android">

	<item android:color="@color/dot_inactive_screen1"></item>
	<item android:color="@color/dot_inactive_screen2"></item>
	<item android:color="@color/dot_inactive_screen3"></item>
	<item android:color="@color/dot_inactive_screen4"></item>
</selector>
MainActivity
int[] colorsActive = Resources.GetIntArray(Resource.Drawable.arrayAcdots);
		int[] colorsInactive = Resources.GetIntArray(Resource.Drawable.arrayIndots);


		dotsLayout.RemoveAllViews();
		for (int i = 0; i < dots.Length; i++)
		{
			dots[i] = new TextView(this);
			dots[i].Text=(Html.FromHtml("&#8226;")).ToString();
			dots[i].TextSize=35;
			dots[i].SetTextColor(Resources.GetColorStateList(colorsInactive[currentPage],null));
			dotsLayout.AddView(dots[i]);
		}

1 个答案:

答案 0 :(得分:0)

这也让我头疼。由于Google不推荐使用更直观的GetColor(int),因此您不能再这样做。

view.SetTextColor(context.Resources.GetColor(Resource.Color.color_name)); 

相反,您应该以以下任何一种方式使用GetColor(int, Theme)

view.SetTextColor(context.Resources.GetColor(Resource.Color.color_name, null)); 
view.SetTextColor(context.Resources.GetColor(Resource.Color.color_name, theme)); 

但是,此功能仅在以后的API 23中可用,因此,如果您想支持较旧的设备,许多Java开发人员都会建议使用

view.SetTextColor(ContextCompat.GetColor(context, Resource.Color.color_name));

现在,对于我们Xamarin开发人员来说,此将不会起作用,因为它将显示一条错误消息,指出无法将int转换为ColorStateList。因此,您应该使用

解决方案:

view.SetTextColor(ContextCompat.GetColorStateList(context, Resource.Color.color_name));

有了这个,我认为您可以解决您的问题。