如何通过其引用ID获取主题

时间:2017-02-01 10:08:33

标签: android android-resources

我需要从主题中提取默认值,但不要从当前主题中提取。

我知道我可以从当前主题中获取这样的属性:

TypedValue typedValue = new TypedValue();
Theme currentTheme = context.getTheme();
currentTheme.resolveAttribute(android.R.attr.windowBackground, typedValue, true);
// result is in: typedValue.data

但是我需要这样的东西:

Theme darkTheme = getTheme(R.style.AppTheme.Dark);

... 我只需要提取一个值,我不想改变当前的主题。

1 个答案:

答案 0 :(得分:5)

看起来我们可以通过在我们的基座ContextThemeWrapper周围创建一个具有所需主题的临时Context来实现此目的,但我相信任何可用的Context都会这样做,因为包装器应该替换给定主题中存在的任何属性值。

Theme darkTheme = new ContextThemeWrapper(getBaseContext(), R.style.AppTheme_Dark).getTheme();

另一种选择如下。这可能是首选,因为看起来好像Theme没有引用任何Context

Theme darkTheme = getResources().newTheme();
darkTheme.applyStyle(R.style.AppTheme_Dark, true);