从应用程序获取主题属性 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 任务的应用程序上下文不完整。
我一直在使用一种方法从当前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 任务的应用程序上下文不完整。