从应用程序类中获取主题属性

时间:2015-12-02 20:56:09

标签: java android android-theme android-styles android-attributes

我一直在使用一种方法从当前Context获取颜色属性:

public static int getColorAttribute(Context context, @AttrRes int attr) {
    final TypedValue value = new TypedValue();
    context.getTheme().resolveAttribute(attr, value, true);
    return value.data;
}

它完美无缺,但当我尝试在我的课程中使用Application时,它会返回0。在大多数情况下,我会这样称呼方法:

int colorAccent = Util.getColorAttribute(this, R.attr.colorAccent);

这会将我在"colorAccent"中设置的themes.xml作为我的AppTheme在我的清单中返回。但在Application课程中,我不得不拨打getApplicationContext()而不是this。所以我在Activity中将该方法的其他一个实例切换为getApplicationContext(),并返回0。我也尝试了getApplication()getBaseContext(),结果相同。

我想知道是否有办法从Application类的应用程序主题中获取颜色。如果没有,为什么getApplicationContext().getTheme()似乎没有返回应用程序主题。

1 个答案:

答案 0 :(得分:3)

您可以尝试自己设置主题吗?

getApplicationContext().getTheme().applyStyle(R.style.someTheme, true);

然后在样式中你的主题是你想要在android中的一些主题的孩子。此方法也应该不受欢迎,因为主题是从活动上下文访问的。 UI任务的应用程序上下文不完整。