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

Bry*_*yan 2 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;
}
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但是当我尝试在扩展Application它的类中使用它时,它返回0. 在大多数情况下,我会像这样调用方法:

int colorAccent = Util.getColorAttribute(this, R.attr.colorAccent);
Run Code Online (Sandbox Code Playgroud)

这将返回"colorAccent"我集themes.xml作为我AppTheme在我的清单。但是在Application课堂上我不得不调用getApplicationContext()而不是this. 因此,我也将方法的其他实例之一切换到了ActivitytogetApplicationContext()中,它返回了0. 我也尝试过getApplication()getBaseContext()结果相同。

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

j2e*_*nue 6

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

getApplicationContext().getTheme().applyStyle(R.style.someTheme, true);
Run Code Online (Sandbox Code Playgroud)

然后在样式中有你的主题,它是你在android中想要的某个主题的子主题。此外,由于主题旨在从活动上下文中访问,因此该方法不应该被拒绝。UI 任务的应用程序上下文不完整。