不推荐使用Xamarin Android SetBackgroundDrawable但不支持SetBackground()

时间:2015-11-10 17:37:49

标签: android xamarin android-drawable

var textView = parentView.FindViewById<TextView>(Resource.Id.txt_chat_message);
GradientDrawable gd = new GradientDrawable();
gd.SetCornerRadius(10);
gd.SetColor(Color.Yellow);
textView.SetBackgroundDrawable(gd);

如上例所示,SetBackgroundDrawable允许我以编程方式控制颜色和半径。我查看了SetBackgroundResouce,但我找不到一个明确的例子,因为它似乎只是将ID转换为我无法改变的资源。

有人可以帮我提供一种替代方案,让我可以灵活地完成与上面的SetBackgroundDrawable相同的操作吗?

3 个答案:

答案 0 :(得分:11)

使用Background属性。通常,只要Android具有不带参数的getX / setX方法,Xamarin就会将其转换为名为X的C#样式属性。

var textView = parentView.FindViewById<TextView>(Resource.Id.txt_chat_message);
GradientDrawable gd = new GradientDrawable();
gd.SetCornerRadius(10);
gd.SetColor(Color.Yellow);
textView.Background = gd;

答案 1 :(得分:3)

修改

基于在设备上运行它似乎Background属性目前尚未完全实现(11.11.2015)。我的试验和错误方法指出,通过属性设置Background会引发异常,因为它没有找到具有适当参数的setBackground方法。所以问题不在于获得drawables的新方法,而是在尝试设置它们时。也许我误用了这个,所以我可以打开更正。

//Works
yesButton.SetBackgroundDrawable(ContextCompat.GetDrawable(context, Resource.Drawable.selector_green_button));

//Works
yesButton.SetBackgroundDrawable(ResourcesCompat.GetDrawable(Resources, Resource.Drawable.selector_green_button, Resources.NewTheme()));

//Doesn't Work     
yesButton.Background = ResourcesCompat.GetDrawable(Resources, Resource.Drawable.selector_green_button, Resources.NewTheme());

//Doesn't Work
yesButton.Background = ContextCompat.GetDrawable(context, Resource.Drawable.selector_green_button);

//Doesn't Work
yesButton.Background = Resources.GetDrawable(Resource.Drawable.selector_green_button);

原始答案

您可以将Background属性用作@Jason Suggested。

为了使用它你现在需要得到Drawable这个有趣的部分:

不推荐使用

GetDrawable方法(因为我认为是API 22)所以你应该使用:

someControl.Background = ContextCompat.GetDrawable(context, Resource.Drawable.your_drawable);

而不是Resources.GetDrawable(Resource.Drawable.your_drawable);

找到此链接以供参考:More info on getting drawables in Android native

答案 2 :(得分:2)

而不是SetBackgroundDrawable(back);使用Background = back;

你必须这样做:

back = context.GetDrawable(Resource.Drawable.cover);
// SetBackgroundDrawable(back);
Background = back;`