我正在努力让一些元数据在 Android 上运行。最具体地说,我正在获取应用程序级元数据来设置以下格式的视图背景:
<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();
}
}
}
如果我使用资源方法并将其指向可绘制对象,则此方法有效。如果我使用“红色”、“蓝色”、“黄色”等颜色字符串 - 这些也可以。但是,如果我尝试使用前面带有井号(#FF0000、#FFFF0000 等)的任何格式的颜色,这将不起作用,即使Android 文档建议它应该:
这是一个已知的错误?有没有简单的解决方法(除了使用简单的字符串或可绘制的引用)?还是我错过了什么?我正在使用 Asus Transformer Prime 10.1 TF301 平板电脑进行测试(Android 4.0.3)。
编辑
我想指出,这不是问题Color.parseColor()
。Android 从不输入语句if (background != null)
,因此元数据根本没有被识别为字符串。