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
相同的操作吗?
答案 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);
答案 2 :(得分:2)
而不是SetBackgroundDrawable(back);
使用Background = back;
你必须这样做:
back = context.GetDrawable(Resource.Drawable.cover);
// SetBackgroundDrawable(back);
Background = back;`