我需要从主题中提取默认值,但不要从当前主题中提取。
我知道我可以从当前主题中获取这样的属性:
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);
... 我只需要提取一个值,我不想改变当前的主题。
答案 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);