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-如何以编程方式扩展列表视图?

使用 xamarin.ios c# 以编程方式添加嵌套的堆栈视图

如何以编程方式从Xamarin.Forms ScrollView中删除内容?

我可以以编程方式更改 Xamarin.Forms 中的 styles.xml 吗?

如何以 xamarin 形式将一个内容页面从客户端项目(IOS/Android)导航到另一个内容页面?