我的主题:
public static Drawable getThemedDrawable(Context context, int resource) {
TypedValue typedValue = new TypedValue();
Resources.Theme theme = context.getTheme();
theme.resolveAttribute(resource, typedValue, true);
if(typedValue.resourceId == 0) {
return context.getResources().getDrawable(R.drawable.standard_theme_not_found);
}
else
return context.getResources().getDrawable(typedValue.resourceId);
}
我用这个代码来获得一个主题drawable:
positive.setBackgroundDrawable(Theme.getThemedDrawable(getBaseContext(), R.attr.AppButton));
这是直接电话:
v-bind:class
typedValue.resourceId始终为0并且不返回真正的可绘制资源ID,在这种情况下它总是返回R.drawable.standard_theme_not_found。
当我使用带有颜色的代码(来自typedValue.data)时,它已经填充并且可以正常工作。
我该如何解决这个问题?
答案 0 :(得分:0)
我自己找到了答案,重要的是,主题在上下文中正确设置。
如果您以编程方式应用主题:
setTheme(myTheme);
然后主题不保存在getBaseContext()
中所以你需要使用
Theme.getThemedDrawable(myActivity, R.attr.AppContainer1Background)
而不是
Theme.getThemedDrawable(getBaseContext(), R.attr.AppContainer1Background)