Xamarin Android:以编程方式从 colors.xml 获取颜色值
Posted
技术标签:
【中文标题】Xamarin Android:以编程方式从 colors.xml 获取颜色值【英文标题】:Xamarin Android: getting color value from colors.xml programmatically 【发布时间】:2016-04-15 21:34:28 【问题描述】:如何以编程方式将颜色值从 colors.xml 文件转换为 C# 代码?
这是我的colors.xml:
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<item name="row_a" type="color">#FFCCFFCC</item>
<item name="row_b" type="color">#FFFFFFCC</item>
<item name="all_text" type="color">#FF000000</item>
<item name="row_red" type="color">#FFFF4444</item>
<item name="row_orange" type="color">#FFE69900</item>
<item name="row_green" type="color">#FF739900</item>
<item name="wheat" type="color">#FFF5DEB3</item>
<integer-array name="androidcolors">
<item>@color/row_a</item>
<item>@color/row_b</item>
<item>@color/all_text</item>
<item>@color/row_red</item>
<item>@color/row_orange</item>
<item>@color/row_green</item>
<item>@color/wheat</item>
</integer-array>
</resources>
我试过了:
Color t = (Color)Resource.Colors.wheat;
但我当然不能以这种方式将 int 值转换为 Color。
编辑:
按照建议我尝试过
Color t = Resources.GetColor(Resource.Color.row_a);
但它给了我一个错误:
Error CS0120 An object reference is required for the non-static field,
method, or property 'Resources.GetColor(int)'
【问题讨论】:
【参考方案1】:试试这个代码:
Color t = new Android.Graphics.Color (ContextCompat.GetColor (this, Resource.Color.row_a));
【讨论】:
ContextCompat 甚至不包含 GetColor 方法!有什么想法吗? 算了。从 NuGet 更新包 Xamarin.Android.Support.V4 解决了该问题。我正在尝试一个旧样本,其中包含旧版本的软件包,所以它没有显示出来。Android.Support.V4.Content.ContextCompat.GetColor(this, Resource.Color.my_color)
【参考方案2】:
问题是我试图从 ListView 适配器访问资源。解决方案是使用:
parent.Resources.GetColor(Resource.Color.row_a)
其中parent
被传递到public override View GetView(int position, View convertView, ViewGroup parent)
方法中。
【讨论】:
这个方法现在已经废弃了,现在你可以这样做new Android.Graphics.Color(ContextCompat.GetColor(this, Resource.Color.color_name))
@CodeIt 出于好奇,你知道为什么 Resources.GetColor
方法被弃用了吗?这种新的ContextCompat
做事方式似乎非常冗长【参考方案3】:
public class MainActivity : AppCompatActivity
protected override void OnCreate(Bundle savedInstancesState)
// check your Resources/Resource.designer.cs file
int nResId = Resource.Color.row_a;
var colorValue = ApplicationContext.GetColor(nResId);
Android.Content.Context.GetColor
Android Resources
【讨论】:
以上是关于Xamarin Android:以编程方式从 colors.xml 获取颜色值的主要内容,如果未能解决你的问题,请参考以下文章
如何首先在 Xamarin.Android 中以编程方式连接到特定的 SSID?
使用 xamarin.ios c# 以编程方式添加嵌套的堆栈视图
如何以编程方式从Xamarin.Forms ScrollView中删除内容?