当我多次将额外属性应用于AppTheme时,它将覆盖前一个属性。这是我正在使用的代码:
主要活动:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
getTheme().applyStyle(R.style.AppTheme_OverlayPrimaryRed);
// If you change `false` to `true`, the overlay above is overwritten.
if (false) {
getTheme().applyStyle(R.style.AppTheme_OverlayAccentRed);
}
super.onCreate(savedInstanceState);
...
}
AppTheme.OverlayPrimaryRed:
<style name="AppTheme.OverlayPrimaryRed">
<item name="colorPrimary">@color/material_red_500</item>
<item name="colorPrimaryDark">@color/material_red_700</item>
</style>
AppTheme.OverlayAccentRed:
<style name="AppTheme.OverlayAccentRed">
<item name="colorAccent">@color/material_red_A200</item>
</style>
有什么想法可以解决这个问题吗?
最佳答案
您的样式定义AppTheme.OverlayPrimaryRed
和AppTheme.OverlayAccentRed
隐式继承自AppTheme
。由于AppTheme
也可能包含colorPrimary
和colorPrimaryDark
的定义,因此第二个applyStyle
语句也将设置这些属性,从而撤消第一个applyStyle
调用。
因此,我在this question的答案中的样式覆盖名称中未使用任何点。
如果出于美学原因要保留点,则可以为叠加层定义一个空的父样式,如下所示:
<style name="Overlay">
</style>
<style name="Overlay.PrimaryRed">
<item name="colorPrimary">@color/material_red_500</item>
<item name="colorPrimaryDark">@color/material_red_700</item>
</style>
<style name="Overlay.AccentRed">
<item name="colorAccent">@color/material_red_A200</item>
</style>
关于android - 多次getTheme()。applyStyle(…),而不会覆盖前一个,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41779821/