在Android元数据中指定十六进制颜色值

时间:2013-02-04 17:43:21

标签: android metadata

我正在努力让一些元数据在Android上运行。最具体地说,我正在获取应用程序级元数据,以下列格式设置View的背景:

<meta-data android:name="background"
           android:value="red" />

<meta-data android:name="background"
           android:resource="@drawable/my_red_background" />

<meta-data android:name="background"
           android:value="#FF0000" />

我使用以下代码来解析信息:

ApplicationInfo app = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
Bundle metaData = app.metaData;
if (metaData != null) {
    int resourceID = metaData.getInt("background", -1);
    if (resourceID != -1) {
        //set the background resource of my view (THIS WORKS)
    }
    else {
        String background = metaData.getString("background");
        if (background != null) {
        try {
            backgroundColor = Color.parseColor(background);
            //Set background color (THIS WORKS for 'red', 'blue', etc.)
        }
        catch (IllegalArgumentException e) {
            e.printStackTrace();
        }
    }

}

如果我使用资源方法并将其指向drawable,则可行。如果我使用“红色”,“蓝色”,“黄色”等颜色字符串 - 这些也可以。但是,如果我尝试使用任何格式前面带有哈希标记(#FF0000,#FFFF0000等)的颜色,这不起作用,即使Android Documentation表明它应该:

android:value description

这是一个已知的错误吗?有一个简单的解决方法(除了使用简单的字符串或可绘制的引用)?或者我错过了什么?我正在使用华硕Transformer Prime 10.1 TF301平板电脑进行测试(Android 4.0.3)。

修改

我想注意这不是Color.parseColor()的问题。 Android永远不会输入语句if (background != null),所以元数据根本不会被识别为字符串。

2 个答案:

答案 0 :(得分:3)

解决!这不是Android错误,而是Android文档错误(惊喜,惊喜!)。十六进制颜色需要一个转义字符才能正确处理:

<meta-data android:name="background"
           android:value="\#FF0000" />

enter image description here

答案 1 :(得分:2)

解决方案1)使用反斜杠,以便值是字符串而不是数字。

解决方案2)而不是调用Color.parseColor(bundle.parseString(..)),只需使用没有反斜杠的getInt(..)。

<强>背景

android:value="#aabbgg"是一个数字

android:value="\#aabbgg"是一个字符串