resolveAttribute始终为属性返回null

时间:2017-01-26 10:42:24

标签: android themes drawable android-appcompat

我的主题:

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)时,它已经填充并且可以正常工作。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我自己找到了答案,重要的是,主题在上下文中正确设置。

如果您以编程方式应用主题:

setTheme(myTheme);

然后主题不保存在getBaseContext()

所以你需要使用

Theme.getThemedDrawable(myActivity, R.attr.AppContainer1Background)

而不是

Theme.getThemedDrawable(getBaseContext(), R.attr.AppContainer1Background)