我一直在使用一种方法从当前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()
似乎没有返回应用程序主题。
答案 0 :(得分:3)
您可以尝试自己设置主题吗?
getApplicationContext().getTheme().applyStyle(R.style.someTheme, true);
然后在样式中你的主题是你想要在android中的一些主题的孩子。此方法也应该不受欢迎,因为主题是从活动上下文访问的。 UI任务的应用程序上下文不完整。