从应用程序获取主题属性 Class

Get Theme Attribute from Application Class

我一直在使用一种方法从当前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 的 class 中使用它时,它 returns 0。在大多数情况下,我会这样调用方法:

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

这将 return 我在 themes.xml 中设置的 "colorAccent" 作为我清单中的 AppTheme。但是在 Application class 中我不得不调用 getApplicationContext() 而不是 this。因此,我也将 Activity 中的方法的其他实例之一切换为 getApplicationContext(),并且它 returned 0。我还尝试了 getApplication()getBaseContext(),结果相同。

我想知道是否有办法从 Application class 中的应用程序主题中获取颜色。或者如果没有,为什么getApplicationContext().getTheme()好像没有return应用主题。

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

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

然后在样式中有你的主题,它是你想要在 android 中的某个主题的子主题。此外,这种方法应该被反对,因为主题是从 activity 上下文访问的。 UI 任务的应用程序上下文不完整。