我将代码分成两个项目,以拥有某种SDK,该SDK具有我以后所有项目所共有的功能。
因此,我遇到了从另一个项目检索一个项目的XML文件中的值的问题。例如,我必须在styles.xml中检索一种自定义颜色(我在attrs.xml中定义,名为“ iconColor”)。这是我所做的:
TypedValue typedValue = new TypedValue();
Resources.Theme theme = context.getTheme();
int colorIdentifier = context.getResources().getIdentifier("iconColor", "attr", context.getPackageName());
if (theme.resolveAttribute(colorIdentifier, typedValue, true)) {
return typedValue.data;
}
else {
return 0;
}
从一个项目到另一个项目都运行良好。现在,出于另一个目的,我想检索上下文主题的colorPrimary。我将代码调整为具有通用功能,现在是这样:
/**
* Retrieves a resource from context's theme using the resource id
*
* @param resId the resource id, ie. android.R.attr.colorPrimary
* @return the resource value, or null if not found
*/
public @Nullable Integer getResourceFromTheme(int resId) {
Integer result = null;
TypedValue typedValue = new TypedValue();
Resources.Theme theme = context.getTheme();
if (theme.resolveAttribute(resId, typedValue, true)) {
result = typedValue.data;
}
return result;
}
/**
* Retrieves a resource from context's theme using the resource name
*
* @param resName the resource name, ie. "colorPrimary"
* @return the resource value, or null if not found
*/
public @Nullable Integer getResourceFromTheme(@NonNull String resName) {
int resId = context.getResources().getIdentifier(resName, "attr", context.getPackageName());
return getResourceFromTheme(resId);
}
因此,从理论上讲,我可以使用android.R检索自定义属性和本机属性。但是,如果我的costom iconColor属性仍然可以使用,则无法检索colorPrimary,它返回的数据不正确。即使很奇怪,当我尝试使用一种方法或另一种方法时,我也得到了不同的值,这意味着我弄错了代码:
最佳答案
好的,函数正常工作,但是我犯了两个错误,xxxx是ColorRes,而aaa / bbbb是ColorInt,我用android.R.attr.colorPrimary而不是R.attr.colorPrimary调用了函数。