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("•")).ToString();
dots[i].TextSize=35;
dots[i].SetTextColor(Resources.GetColorStateList(colorsInactive[currentPage],null));
dotsLayout.AddView(dots[i]);
}
答案 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));
有了这个,我认为您可以解决您的问题。