【问题标题】:colors.xml not generating the correct values in gen/R file?colors.xml 没有在 gen/R 文件中生成正确的值?
【发布时间】:2013-12-31 17:15:52
【问题描述】:

我正在尝试访问colors.xml 中的每个值,但R/color 类中的int(十六进制)值与colors.xml 中定义的对应值不匹配。以下是一些示例值:

 R/color (all of which starts with 0x7f0400...):
    public static final int AliceBlue=0x7f04002d;
    public static final int AntiqueWhite=0x7f040023;
    public static final int Aqua=0x7f04007d;
    public static final int Aquamarine=0x7f040062;
    public static final int Azure=0x7f04002b;
...

 But in colors.xml (all of which starts with #00...):
    <color name="AliceBlue">#F0F8FF</color>
    <color name="AntiqueWhite">#FAEBD7</color>
    <color name="Aqua">#00FFFF</color>
    <color name="Aquamarine">#7FFFD4</color>
    <color name="Azure">#F0FFFF</color>

【问题讨论】:

    标签: android xml colors r.java-file


    【解决方案1】:

    R 文件中的值不是您定义的值,它们是id,将分配给每个color,因此您可以访问它们。您可以使用R.color.AliceBlue,它会给您在colors.xml 中分配给它的值。 不要修改 R.java 文件。它是自动生成的。

    【讨论】:

    • 例如,当我使用“R.color.Red”时,颜色不会输出为红色,colors.xml 中定义的其他颜色也是如此。我已经仔细检查了 colors.xml 的值,它们是正确的。下面是我如何使用它为我的 Spannable 字符串的某些字符着色:"spnStr", spnStr.setSpan(new ForegroundColorSpan(R.color.Red), i, i+1, android.text.Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
    • @jerryh91 查看我关于如何引用颜色的更新答案
    【解决方案2】:

    R.java (0x7f04002d) 中的数字与colors.xml(例如F0F8FF)中的十六进制代码不对应。 R.java 中的int 数字是系统在编译程序时生成的标识符。

    当您使用R.color.AliceBlue 访问它时,它将引用R.java 中的int,并且应该返回正确的颜色。

    您甚至不应该/不想在R.java 中胡闹,所以只要它返回正确的颜色,就不用担心里面有什么。另请注意,您不能依赖 int,因为它们可以从编译更改为编译,因此您不想引用 int。您只需引用您给它的名称即可引用,例如AntiqueWhite

    要引用它,您需要通过使用 getColor() 引用其 id 来获得 Color

    new ForegroundColorSpan(getResources().getColor(AliceBlue));
    

    【讨论】:

      猜你喜欢
      • 2011-09-15
      • 2013-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多