2013-12-13 46 views
0

我试图访问colors.xml中的每个值,但R/color类中的int(十六进制)值与colors.xml中定义的对应值不匹配。下面是一些样本值:colors.xml在gen/R文件中没有生成正确的值?

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> 

回答

1

R文件中的值不是您定义他们将被分配到各color所以你访问他们id值。您可以使用R.color.AliceBlue,它将为您分配的值为colors.xml不要修改R.java文件。它是自动生成的。

+0

当我用“R.color.Red”例如,颜色不输出红色引用其id得到Color,这也对于colors.xml中定义的其他颜色也是如此。我仔细检查了colors.xml的值,它们是正确的。如何使用它来为我的Spannable字符串的某些字符着色:“spnStr”,spnStr.setSpan(new ForegroundColorSpan(R.color.Red),i,i + 1,android.text.Spannable.SPAN_EXCLUSIVE_INCLUSIVE); – jerryh91

+1

@ jerryh91查看我更新的答案,了解如何引用颜色 – codeMagic

1

数量在R.java0x7f04002d)是不是假设符合您的十六进制代码在colors.xml(前。F0F8FF)。 R.java中的int号码是系统在编译程序时生成的标识符。

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

你甚至不需要/想要在R.java中弄乱,所以不要担心那里有什么,只要它返回正确的颜色。还要注意,你不能依赖那个int,因为它们可以从编译变成编译,所以你不想引用那个int。您只需参考您提供的名称来引用,如AntiqueWhite

要引用这一点,你需要使用getColor()

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